@@ -30,6 +30,7 @@ import Prelude hiding (fail)
3030eval :: ( Carrier sig m
3131 , Member (Reader Loc ) sig
3232 , MonadFail m
33+ , Semigroup value
3334 )
3435 => Analysis address value m
3536 -> (Term Core User -> m value )
@@ -41,12 +42,12 @@ eval Analysis{..} eval = \case
4142 addr <- alloc n
4243 v <- bind n addr (eval (instantiate1 (pure n) b))
4344 v <$ assign addr v
44- a :>> b -> eval a > > eval b
45+ a :>> b -> (<>) <$> eval a <* > eval b
4546 Named (Ignored n) a :>>= b -> do
4647 a' <- eval a
4748 addr <- alloc n
4849 assign addr a'
49- bind n addr (eval (instantiate1 (pure n) b))
50+ bind n addr ((a' <> ) <$> eval (instantiate1 (pure n) b))
5051 Lam (Named (Ignored n) b) -> abstract eval n (instantiate1 (pure n) b)
5152 f :$ a -> do
5253 f' <- eval f
@@ -210,18 +211,18 @@ ruby = fromBody $ annWith callStack (rec (named' __semantic_global) (do' stateme
210211
211212
212213data Analysis address value m = Analysis
213- { alloc :: User -> m address
214- , bind :: forall a . User -> address -> m a -> m a
215- , lookupEnv :: User -> m (Maybe address )
216- , deref :: address -> m (Maybe value )
217- , assign :: address -> value -> m ()
218- , abstract :: (Term Core User -> m value ) -> User -> Term Core User -> m value
219- , apply :: (Term Core User -> m value ) -> value -> value -> m value
220- , unit :: m value
221- , bool :: Bool -> m value
222- , asBool :: value -> m Bool
223- , string :: Text -> m value
224- , asString :: value -> m Text
225- , record :: [(User , value )] -> m value
226- , (...) :: address -> User -> m (Maybe address)
214+ { alloc :: User -> m address
215+ , bind :: forall a . User -> address -> m a -> m a
216+ , lookupEnv :: User -> m (Maybe address )
217+ , deref :: address -> m (Maybe value )
218+ , assign :: address -> value -> m ()
219+ , abstract :: (Term Core User -> m value ) -> User -> Term Core User -> m value
220+ , apply :: (Term Core User -> m value ) -> value -> value -> m value
221+ , unit :: m value
222+ , bool :: Bool -> m value
223+ , asBool :: value -> m Bool
224+ , string :: Text -> m value
225+ , asString :: value -> m Text
226+ , record :: [(User , value )] -> m value
227+ , (...) :: address -> User -> m (Maybe address)
227228 }
0 commit comments