1- {-# LANGUAGE ScopedTypeVariables, TypeOperators #-}
1+ {-# LANGUAGE FlexibleContexts, ScopedTypeVariables #-}
22
33module Generators
44 ( literal
@@ -18,7 +18,7 @@ import Hedgehog hiding (Var)
1818import qualified Hedgehog.Gen as Gen
1919import qualified Hedgehog.Range as Range
2020
21- import Control.Effect.Sum ( (:+:) )
21+ import Control.Effect.Carrier
2222import qualified Data.Core as Core
2323import Data.Name
2424import Data.Term
@@ -30,16 +30,16 @@ name :: MonadGen m => m (Named User)
3030name = Gen. prune (named' <$> names) where
3131 names = Gen. text (Range. linear 1 10 ) Gen. lower
3232
33- boolean :: MonadGen m => m (Term ( Core. Ann :+: Core. Core ) User )
33+ boolean :: ( Carrier sig t , Member Core. Core sig , MonadGen m ) => m (t User )
3434boolean = Core. bool <$> Gen. bool
3535
36- variable :: MonadGen m => m (Term ( Core. Ann :+: Core. Core ) User )
36+ variable :: ( Carrier sig t , Member Core. Core sig , MonadGen m ) => m (t User )
3737variable = pure . namedValue <$> name
3838
39- ifthenelse :: MonadGen m => m (Term ( Core. Ann :+: Core. Core ) User ) -> m (Term ( Core. Ann :+: Core. Core ) User )
39+ ifthenelse :: ( Carrier sig t , Member Core. Core sig , MonadGen m ) => m (t User ) -> m (t User )
4040ifthenelse bod = Gen. subterm3 boolean bod bod Core. if'
4141
42- apply :: MonadGen m => m (Term ( Core. Ann :+: Core. Core ) User ) -> m (Term ( Core. Ann :+: Core. Core ) User )
42+ apply :: ( Carrier sig t , Member Core. Core sig , MonadGen m ) => m (t User ) -> m (t User )
4343apply gen = go where
4444 go = Gen. recursive
4545 Gen. choice
@@ -48,21 +48,21 @@ apply gen = go where
4848 , Gen. subtermM go (\ x -> Core. lam <$> name <*> pure x)
4949 ]
5050
51- lambda :: MonadGen m => m (Term ( Core. Ann :+: Core. Core ) User ) -> m (Term ( Core. Ann :+: Core. Core ) User )
51+ lambda :: ( Carrier sig t , Member Core. Core sig , MonadGen m ) => m (t User ) -> m (t User )
5252lambda bod = do
5353 arg <- name
5454 Gen. subterm bod (Core. lam arg)
5555
56- record :: MonadGen m => m (Term ( Core. Ann :+: Core. Core ) User ) -> m (Term ( Core. Ann :+: Core. Core ) User )
56+ record :: ( Carrier sig t , Member Core. Core sig , MonadGen m ) => m (t User ) -> m (t User )
5757record bod = Core. record <$> Gen. list (Range. linear 0 5 ) ((,) . namedValue <$> name <*> bod)
5858
59- atoms :: MonadGen m => [m (Term ( Core. Ann :+: Core. Core ) User )]
59+ atoms :: ( Carrier sig t , Member Core. Core sig , MonadGen m ) => [m (t User )]
6060atoms = [variable, pure Core. unit, boolean, Core. string <$> Gen. text (Range. linear 1 10 ) Gen. lower]
6161
62- literal :: MonadGen m => m (Term ( Core. Ann :+: Core. Core ) User )
62+ literal :: ( Carrier sig t , Member Core. Core sig , MonadGen m ) => m (t User )
6363literal = Gen. recursive Gen. choice atoms [lambda literal, record literal]
6464
65- expr :: MonadGen m => m (Term ( Core. Ann :+: Core. Core ) User )
65+ expr :: ( Carrier sig t , Member Core. Core sig , MonadGen m ) => m (t User )
6666expr = Gen. recursive Gen. choice atoms
6767 [ Gen. subtermM expr (\ x -> flip Core. rec x <$> name)
6868 , Gen. subterm2 expr expr (Core. >>>)
0 commit comments