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)
                  
                  
                
я уверен, что зависимость только от типа это плохой путь
Обсуждают сегодня