diff options
| author | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-11-01 17:45:25 +0100 |
|---|---|---|
| committer | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-11-01 17:45:25 +0100 |
| commit | 2a20afb971ef3323955964b1bbb5f75af4ca5fcb (patch) | |
| tree | 575b3ef097729846ac09e18e2d579ae0577accd8 /lambda-calcul/haskell/src/Minilang/Lambda | |
| parent | 1d1f0efc7de1eaa0c8a6b503892c2f950008fde6 (diff) | |
| download | lambda-nantes-2a20afb971ef3323955964b1bbb5f75af4ca5fcb.tar.gz | |
Add server capability
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang/Lambda')
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Lambda/Eval.hs | 9 | ||||
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Lambda/Infer.hs | 10 | ||||
| -rw-r--r-- | lambda-calcul/haskell/src/Minilang/Lambda/Unify.hs | 5 |
3 files changed, 18 insertions, 6 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/Lambda/Eval.hs b/lambda-calcul/haskell/src/Minilang/Lambda/Eval.hs index 58f8ba6..7f7aad7 100644 --- a/lambda-calcul/haskell/src/Minilang/Lambda/Eval.hs +++ b/lambda-calcul/haskell/src/Minilang/Lambda/Eval.hs @@ -1,13 +1,16 @@ +{-# LANGUAGE DeriveAnyClass #-} + module Minilang.Lambda.Eval where -import Data.Text (Text, unpack) -import Debug.Trace (trace) +import Data.Aeson (FromJSON, ToJSON) +import Data.Text (Text) +import GHC.Generics (Generic) data Term = Var Text | Lam Text Term | App Term Term - deriving (Show, Read, Eq) + deriving (Show, Read, Eq, Generic, ToJSON, FromJSON) type Env = [(Text, Term)] 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 = diff --git a/lambda-calcul/haskell/src/Minilang/Lambda/Unify.hs b/lambda-calcul/haskell/src/Minilang/Lambda/Unify.hs index df66113..f3fff04 100644 --- a/lambda-calcul/haskell/src/Minilang/Lambda/Unify.hs +++ b/lambda-calcul/haskell/src/Minilang/Lambda/Unify.hs @@ -1,15 +1,18 @@ -- ported from https://www.cs.cornell.edu/courses/cs3110/2011sp/Lectures/lec26-type-inference/type-inference.htm {-# LANGUAGE LambdaCase #-} +{-# LANGUAGE DeriveAnyClass #-} module Minilang.Lambda.Unify where import Data.Text (Text) +import GHC.Generics (Generic) +import Data.Aeson (ToJSON, FromJSON) type Identifier = Text data Type = TyVar Text | Type :-> Type - deriving (Show, Eq) + deriving (Show, Eq, Generic, ToJSON, FromJSON) infixr 5 :-> |
