summaryrefslogtreecommitdiff
path: root/events/src/Events/Spec/Eval.hs
diff options
context:
space:
mode:
Diffstat (limited to 'events/src/Events/Spec/Eval.hs')
-rw-r--r--events/src/Events/Spec/Eval.hs23
1 files changed, 0 insertions, 23 deletions
diff --git a/events/src/Events/Spec/Eval.hs b/events/src/Events/Spec/Eval.hs
index 9cfb7c1..fdc18c8 100644
--- a/events/src/Events/Spec/Eval.hs
+++ b/events/src/Events/Spec/Eval.hs
@@ -1,10 +1,7 @@
1{-# LANGUAGE GADTs, DataKinds, TypeFamilies, TypeOperators, RankNTypes, ScopedTypeVariables #-} 1{-# LANGUAGE GADTs, DataKinds, TypeFamilies, TypeOperators, RankNTypes, ScopedTypeVariables #-}
2{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
3{-# LANGUAGE InstanceSigs #-}
4 2
5module Events.Spec.Eval 3module Events.Spec.Eval
6 ( evalExpr 4 ( evalExpr
7 , Bindable(..)
8 ) where 5 ) where
9 6
10import Events.Spec.Types 7import Events.Spec.Types
@@ -42,23 +39,3 @@ evalExpr (EVal a) = a
42evalExpr (ELam a) = a 39evalExpr (ELam a) = a
43evalExpr (EApp (ELam (EPri f)) a) = evalExpr . f $ evalExpr a 40evalExpr (EApp (ELam (EPri f)) a) = evalExpr . f $ evalExpr a
44evalExpr (EApp f a) = evalExpr $ beta a (evalExpr f) 41evalExpr (EApp f a) = evalExpr $ beta a (evalExpr f)
45
46type family Ctx m f where
47 Ctx m (m a -> b) = (a ': Ctx m b)
48 Ctx m a = '[]
49
50type family Fin m f where
51 Fin m (m a -> b) = Fin m b
52 Fin m (m a) = a
53 Fin m a = a
54
55class Bindable m b where
56 liftE :: (Val m a -> b) -> Expr m (a ': Ctx m b) (Fin m b)
57
58instance ((Val m b) ~ (m b), Applicative m, Bindable m c) => Bindable m (m b -> c) where
59 liftE :: (Val m a -> m b -> c) -> Expr m (a ': b ': Ctx m c) (Fin m c)
60 liftE f = (EPri :: (Val m a -> Expr m (b ': Ctx m c) (Fin m c)) -> Expr m (a ': b ': Ctx m c) (Fin m c)) . ((liftE :: (Val m b -> c) -> Expr m (b ': Ctx m c) (Fin m c)) . ) $ f
61
62instance {-# OVERLAPPABLE #-} (Val m b ~ m b, Ctx m (m b) ~ '[], Fin m (m b) ~ b) => Bindable m (m b) where
63 liftE :: (Val m a -> Val m b) -> Expr m '[a] b
64 liftE = EPri . (EVal .)