diff options
Diffstat (limited to 'src/CHAD/EnvDescr.hs')
-rw-r--r-- | src/CHAD/EnvDescr.hs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/CHAD/EnvDescr.hs b/src/CHAD/EnvDescr.hs index de615a1..4c287d7 100644 --- a/src/CHAD/EnvDescr.hs +++ b/src/CHAD/EnvDescr.hs @@ -1,4 +1,5 @@ {-# LANGUAGE DataKinds #-} +{-# LANGUAGE EmptyCase #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-} @@ -9,11 +10,13 @@ module CHAD.EnvDescr where import Data.Kind (Type) +import Data.Some import GHC.TypeLits (Symbol) import Analysis.Identity (ValId(..)) import AST.Env import AST.Types +import AST.Weaken import CHAD.Types import Data @@ -35,6 +38,11 @@ descrList :: Descr env sto -> SList STy env descrList DTop = SNil descrList (des `DPush` (t, _, _)) = t `SCons` descrList des +descrPrj :: Descr env sto -> Idx env t -> (STy t, Maybe (ValId t), Some Storage) +descrPrj (_ `DPush` (ty, vid, sto)) IZ = (ty, vid, Some sto) +descrPrj (des `DPush` _) (IS i) = descrPrj des i +descrPrj DTop i = case i of {} + -- | This could have more precise typing on the output storage. subDescr :: Descr env sto -> Subenv env env' -> (forall sto'. Descr env' sto' |