diff options
Diffstat (limited to 'events/src/Events/Spec/Eval.hs')
-rw-r--r-- | events/src/Events/Spec/Eval.hs | 23 |
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 | ||
5 | module Events.Spec.Eval | 3 | module Events.Spec.Eval |
6 | ( evalExpr | 4 | ( evalExpr |
7 | , Bindable(..) | ||
8 | ) where | 5 | ) where |
9 | 6 | ||
10 | import Events.Spec.Types | 7 | import Events.Spec.Types |
@@ -42,23 +39,3 @@ evalExpr (EVal a) = a | |||
42 | evalExpr (ELam a) = a | 39 | evalExpr (ELam a) = a |
43 | evalExpr (EApp (ELam (EPri f)) a) = evalExpr . f $ evalExpr a | 40 | evalExpr (EApp (ELam (EPri f)) a) = evalExpr . f $ evalExpr a |
44 | evalExpr (EApp f a) = evalExpr $ beta a (evalExpr f) | 41 | evalExpr (EApp f a) = evalExpr $ beta a (evalExpr f) |
45 | |||
46 | type family Ctx m f where | ||
47 | Ctx m (m a -> b) = (a ': Ctx m b) | ||
48 | Ctx m a = '[] | ||
49 | |||
50 | type 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 | |||
55 | class Bindable m b where | ||
56 | liftE :: (Val m a -> b) -> Expr m (a ': Ctx m b) (Fin m b) | ||
57 | |||
58 | instance ((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 | |||
62 | instance {-# 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 .) | ||