module PlutusCore.InlineUtils (InlineHints(..)) where

import Data.Semigroup (Any (..))

newtype InlineHints name a = InlineHints { InlineHints name a -> a -> name -> Bool
shouldInline :: a -> name -> Bool }
    deriving (b -> InlineHints name a -> InlineHints name a
NonEmpty (InlineHints name a) -> InlineHints name a
InlineHints name a -> InlineHints name a -> InlineHints name a
(InlineHints name a -> InlineHints name a -> InlineHints name a)
-> (NonEmpty (InlineHints name a) -> InlineHints name a)
-> (forall b.
    Integral b =>
    b -> InlineHints name a -> InlineHints name a)
-> Semigroup (InlineHints name a)
forall b.
Integral b =>
b -> InlineHints name a -> InlineHints name a
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
forall a name. NonEmpty (InlineHints name a) -> InlineHints name a
forall a name.
InlineHints name a -> InlineHints name a -> InlineHints name a
forall a name b.
Integral b =>
b -> InlineHints name a -> InlineHints name a
stimes :: b -> InlineHints name a -> InlineHints name a
$cstimes :: forall a name b.
Integral b =>
b -> InlineHints name a -> InlineHints name a
sconcat :: NonEmpty (InlineHints name a) -> InlineHints name a
$csconcat :: forall a name. NonEmpty (InlineHints name a) -> InlineHints name a
<> :: InlineHints name a -> InlineHints name a -> InlineHints name a
$c<> :: forall a name.
InlineHints name a -> InlineHints name a -> InlineHints name a
Semigroup, Semigroup (InlineHints name a)
InlineHints name a
Semigroup (InlineHints name a)
-> InlineHints name a
-> (InlineHints name a -> InlineHints name a -> InlineHints name a)
-> ([InlineHints name a] -> InlineHints name a)
-> Monoid (InlineHints name a)
[InlineHints name a] -> InlineHints name a
InlineHints name a -> InlineHints name a -> InlineHints name a
forall a.
Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
forall a name. Semigroup (InlineHints name a)
forall a name. InlineHints name a
forall a name. [InlineHints name a] -> InlineHints name a
forall a name.
InlineHints name a -> InlineHints name a -> InlineHints name a
mconcat :: [InlineHints name a] -> InlineHints name a
$cmconcat :: forall a name. [InlineHints name a] -> InlineHints name a
mappend :: InlineHints name a -> InlineHints name a -> InlineHints name a
$cmappend :: forall a name.
InlineHints name a -> InlineHints name a -> InlineHints name a
mempty :: InlineHints name a
$cmempty :: forall a name. InlineHints name a
$cp1Monoid :: forall a name. Semigroup (InlineHints name a)
Monoid) via (a -> name -> Any)

instance Show (InlineHints name a) where
    show :: InlineHints name a -> String
show InlineHints name a
_ = String
"<inline hints>"