{-# LANGUAGE TemplateHaskell #-}
module Cooked.MockChain.Misc
(
MockChainMisc (..),
runMockChainMisc,
define,
defineM,
note,
noteP,
noteL,
noteW,
noteS,
assert,
assert',
)
where
import Cooked.Pretty.Class
import Cooked.Pretty.Hashable
import Cooked.Pretty.Options
import PlutusLedgerApi.V3 qualified as Api
import Polysemy
import Polysemy.Writer
import Prettyprinter qualified as PP
data MockChainMisc :: Effect where
Define :: (ToHash a) => String -> a -> MockChainMisc m a
Note :: (PrettyCookedOpts -> DocCooked) -> MockChainMisc m ()
Assert :: String -> Bool -> MockChainMisc m ()
makeSem_ ''MockChainMisc
runMockChainMisc ::
forall effs a j.
(Member (Writer j) effs) =>
(String -> Api.BuiltinByteString -> j) ->
((PrettyCookedOpts -> DocCooked) -> j) ->
(String -> Bool -> j) ->
Sem (MockChainMisc : effs) a ->
Sem effs a
runMockChainMisc :: forall (effs :: EffectRow) a j.
Member (Writer j) effs =>
(String -> BuiltinByteString -> j)
-> ((PrettyCookedOpts -> DocCooked) -> j)
-> (String -> Bool -> j)
-> Sem (MockChainMisc : effs) a
-> Sem effs a
runMockChainMisc String -> BuiltinByteString -> j
injectAlias (PrettyCookedOpts -> DocCooked) -> j
injectNote String -> Bool -> j
injectPred = (forall (rInitial :: EffectRow) x.
MockChainMisc (Sem rInitial) x -> Sem effs x)
-> Sem (MockChainMisc : effs) a -> Sem effs a
forall (e :: Effect) (r :: EffectRow) a.
FirstOrder e "interpret" =>
(forall (rInitial :: EffectRow) x. e (Sem rInitial) x -> Sem r x)
-> Sem (e : r) a -> Sem r a
interpret ((forall (rInitial :: EffectRow) x.
MockChainMisc (Sem rInitial) x -> Sem effs x)
-> Sem (MockChainMisc : effs) a -> Sem effs a)
-> (forall (rInitial :: EffectRow) x.
MockChainMisc (Sem rInitial) x -> Sem effs x)
-> Sem (MockChainMisc : effs) a
-> Sem effs a
forall a b. (a -> b) -> a -> b
$ \case
(Define String
name x
hashable) -> j -> Sem effs ()
forall o (r :: EffectRow). Member (Writer o) r => o -> Sem r ()
tell (String -> BuiltinByteString -> j
injectAlias String
name (BuiltinByteString -> j) -> BuiltinByteString -> j
forall a b. (a -> b) -> a -> b
$ x -> BuiltinByteString
forall a. ToHash a => a -> BuiltinByteString
toHash x
hashable) Sem effs () -> Sem effs x -> Sem effs x
forall a b. Sem effs a -> Sem effs b -> Sem effs b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> x -> Sem effs x
forall a. a -> Sem effs a
forall (m :: * -> *) a. Monad m => a -> m a
return x
hashable
(Note PrettyCookedOpts -> DocCooked
s) -> j -> Sem effs ()
forall o (r :: EffectRow). Member (Writer o) r => o -> Sem r ()
tell (j -> Sem effs ()) -> j -> Sem effs ()
forall a b. (a -> b) -> a -> b
$ (PrettyCookedOpts -> DocCooked) -> j
injectNote PrettyCookedOpts -> DocCooked
s
(Assert String
s Bool
b) -> j -> Sem effs ()
forall o (r :: EffectRow). Member (Writer o) r => o -> Sem r ()
tell (j -> Sem effs ()) -> j -> Sem effs ()
forall a b. (a -> b) -> a -> b
$ String -> Bool -> j
injectPred String
s Bool
b
define :: forall effs a. (Member MockChainMisc effs, ToHash a) => String -> a -> Sem effs a
defineM :: (Member MockChainMisc effs, ToHash a) => String -> Sem effs a -> Sem effs a
defineM :: forall (effs :: EffectRow) a.
(Member MockChainMisc effs, ToHash a) =>
String -> Sem effs a -> Sem effs a
defineM String
name = (String -> a -> Sem effs a
forall (effs :: EffectRow) a.
(Member MockChainMisc effs, ToHash a) =>
String -> a -> Sem effs a
define String
name (a -> Sem effs a) -> Sem effs a -> Sem effs a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<<)
note :: forall effs. (Member MockChainMisc effs) => (PrettyCookedOpts -> DocCooked) -> Sem effs ()
noteP :: forall effs s. (Member MockChainMisc effs, PrettyCooked s) => s -> Sem effs ()
noteP :: forall (effs :: EffectRow) s.
(Member MockChainMisc effs, PrettyCooked s) =>
s -> Sem effs ()
noteP s
doc = (PrettyCookedOpts -> DocCooked) -> Sem effs ()
forall (effs :: EffectRow).
Member MockChainMisc effs =>
(PrettyCookedOpts -> DocCooked) -> Sem effs ()
note (PrettyCookedOpts -> s -> DocCooked
forall a. PrettyCooked a => PrettyCookedOpts -> a -> DocCooked
`prettyCookedOpt` s
doc)
noteL :: forall effs l. (Member MockChainMisc effs, PrettyCookedList l) => String -> l -> Sem effs ()
noteL :: forall (effs :: EffectRow) l.
(Member MockChainMisc effs, PrettyCookedList l) =>
String -> l -> Sem effs ()
noteL String
title l
docs = (PrettyCookedOpts -> DocCooked) -> Sem effs ()
forall (effs :: EffectRow).
Member MockChainMisc effs =>
(PrettyCookedOpts -> DocCooked) -> Sem effs ()
note ((PrettyCookedOpts -> DocCooked) -> Sem effs ())
-> (PrettyCookedOpts -> DocCooked) -> Sem effs ()
forall a b. (a -> b) -> a -> b
$ \PrettyCookedOpts
opts -> PrettyCookedOpts -> DocCooked -> DocCooked -> l -> DocCooked
forall a.
PrettyCookedList a =>
PrettyCookedOpts -> DocCooked -> DocCooked -> a -> DocCooked
prettyItemize PrettyCookedOpts
opts (String -> DocCooked
forall a. PrettyCooked a => a -> DocCooked
prettyCooked String
title) DocCooked
"-" l
docs
noteW :: forall effs s. (Member MockChainMisc effs, Show s) => s -> Sem effs ()
noteW :: forall (effs :: EffectRow) s.
(Member MockChainMisc effs, Show s) =>
s -> Sem effs ()
noteW = (PrettyCookedOpts -> DocCooked) -> Sem effs ()
forall (effs :: EffectRow).
Member MockChainMisc effs =>
(PrettyCookedOpts -> DocCooked) -> Sem effs ()
note ((PrettyCookedOpts -> DocCooked) -> Sem effs ())
-> (s -> PrettyCookedOpts -> DocCooked) -> s -> Sem effs ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DocCooked -> PrettyCookedOpts -> DocCooked
forall a b. a -> b -> a
const (DocCooked -> PrettyCookedOpts -> DocCooked)
-> (s -> DocCooked) -> s -> PrettyCookedOpts -> DocCooked
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s -> DocCooked
forall a ann. Show a => a -> Doc ann
PP.viaShow
noteS :: forall effs. (Member MockChainMisc effs) => String -> Sem effs ()
noteS :: forall (effs :: EffectRow).
Member MockChainMisc effs =>
String -> Sem effs ()
noteS = String -> Sem effs ()
forall (effs :: EffectRow) s.
(Member MockChainMisc effs, PrettyCooked s) =>
s -> Sem effs ()
noteP
assert :: forall effs. (Member MockChainMisc effs) => String -> Bool -> Sem effs ()
assert' :: forall effs. (Member MockChainMisc effs) => Bool -> Sem effs ()
assert' :: forall (effs :: EffectRow).
Member MockChainMisc effs =>
Bool -> Sem effs ()
assert' = String -> Bool -> Sem effs ()
forall (effs :: EffectRow).
Member MockChainMisc effs =>
String -> Bool -> Sem effs ()
assert String
"Assertion"