diff options
Diffstat (limited to 'src/Example.hs')
-rw-r--r-- | src/Example.hs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/Example.hs b/src/Example.hs index d1d04e3..fb4e851 100644 --- a/src/Example.hs +++ b/src/Example.hs @@ -1,6 +1,8 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE OverloadedLabels #-} +{-# LANGUAGE PolyKinds #-} +{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} module Example where @@ -14,6 +16,16 @@ import Simplify -- ppExpr senv5 $ simplifyN 20 $ let d = descr5 SMerge SMerge in freezeRet d (drev d ex5) (EConst ext STF32 1.0) +type family MergeEnv env where + MergeEnv '[] = '[] + MergeEnv (t : ts) = "merge" : MergeEnv ts + +mergeDescr :: KnownEnv env => Descr env (MergeEnv env) +mergeDescr = go knownEnv + where go :: SList STy env -> Descr env (MergeEnv env) + go SNil = DTop + go (t `SCons` env) = go env `DPush` (t, SMerge) + bin :: SOp (TPair a b) c -> Ex env a -> Ex env b -> Ex env c bin op a b = EOp ext op (EPair ext a b) |