utlc и stlc
отличие в том,что у второго появляется типизация для лямбды
В общем пришел к такому синтаксису, есть более лучше вариант?
data Type = Base | Arrow Type Type deriving (Eq, Read, Show)
data BExpr t
= Var String
| App (BExpr t) (BExpr t)
| Lam (t String) (BExpr t)
deriving instance Show (t String) => Show (BExpr t)
type family UTLC f :: *
type instance UTLC String = String
newtype UTLCW f = UTLCW (UTLC f)
deriving newtype instance (Show (UTLC f)) => Show (UTLCW f)
type family STLC f :: *
type instance STLC String = (String, Type)
newtype STLCW f = STLCW (STLC f)
deriving newtype instance (Show (STLC f)) => Show (STLCW f)
я уверен, что зависимость только от типа это плохой путь
Обсуждают сегодня