Я пытаюсь настроить структуру данных, которая является расширением лямбда-исчисления, чтобы разрешить сложение и вычитание. Я пытаюсь создать структуру под названием AE, которая может либо иметь Lit как таковую, либо оценивать сложение и вычитание. Ошибка, которую я получаю, говорит о следующем:
Недопустимая подпись типа: Lit :: ...
Должна быть переменной формы :: type
Lit :: Int -> AE
Что не так с моим объявлением этой структуры данных?
{-# Language GADTs #-}
data AE where
Lit :: Int -> AE
Add :: Int -> Int -> AE
Sub :: Int -> Int -> AE
deriving (Show)
eval :: AE -> Maybe Int
eval (Lit n) = Just n
eval (Add n1 n2) = n1 + n2
eval (Sub n1 n2) = do
if(n1<n2) then return nothing
else return n1 - n2