diff options
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs')
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs b/lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs index 94fecb3..2e1814e 100644 --- a/lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs +++ b/lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs @@ -1,13 +1,16 @@ {-# LANGUAGE LambdaCase #-} +{-# LANGUAGE DeriveAnyClass #-} module Minilang.Lambda.Infer where import Control.Monad.State (MonadState (..), StateT, evalStateT, modify) +import Data.Aeson (FromJSON, ToJSON) import Data.Bifunctor (first) import Data.Char (chr, ord) import qualified Data.List as List import qualified Data.Map as Map import Data.Text (Text, pack) +import GHC.Generics (Generic) import qualified Minilang.Lambda.Eval as Eval import Minilang.Lambda.Unify (Type (..), UnifyError, apply, unify) import Prelude hiding (lookup) @@ -48,8 +51,11 @@ typeOf (Var _ t) = t typeOf (Lam _ _ t) = t typeOf (App _ _ t) = t -data Context = Context {nextVar :: Int, typeContext :: Map.Map Text Type} - deriving (Eq, Show) +data Context = Context + { nextVar :: Int, + typeContext :: Map.Map Text Type + } + deriving (Eq, Show, Generic, ToJSON, FromJSON) annotate :: Eval.Term -> Either TypeError (ATerm Type) annotate t = |
