(Post a new comment)
(Reply to this)
data [a] = [] | a : [a] -- значит, конструкторы имеют типы [] :: [a] (:) :: a -> [a] -> [a] data Maybe a = Nothing | Just a Nothing :: Maybe a Just :: a -> Maybe a
data [a] where [] :: [a] (:) :: a -> [a] -> [a] data Maybe a where Nothing :: Maybe a Just :: a -> Maybe a
Rigid :: Rigidity Maybe Flexible :: Rigidity Identity
data Exp :: * -> * where Plus :: Exp Int -> Exp Int -> Exp Int -- может принимать только выражения с Int и возвращает такой же Not :: Exp Bool -> Exp Bool -- аналогично, кроме как выражения над логическими значениями смысла не имеет.