Синоним типа для Haskell, дающий ошибки типа - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь создать синоним типа, похожий на этот:haskell жалуется

    Not in scope: data constructor `Result'

Как определить синоним типа с работающим конструктором?!

Ответы [ 3 ]

6 голосов
/ 08 ноября 2011

Как вы пытаетесь создать Result ??Правильный путь:

Если вы объявите его как data:

data Result = Result (Either String [Token])

f :: Result
f = (Result (Left "test"))

Или, если вы объявите как type:

type Result = Either String [Token]

f :: Result
f = Left "test"
4 голосов
/ 08 ноября 2011

С

type Result = Either String Token

конструкторы данных

Left :: String -> Result
Right :: [Token] -> Result

потому что

data Either a b = Left a | Right b

С

data Result = Either String [Token]

вы объявляете Result одним конструктором с двумя аргументами, Either с типом

Either :: String -> [Token] -> Result

а) это, вероятно, не то, что вам нужно, и б) сбивает с толку, потому что Either является известным конструктором типов.

0 голосов
/ 08 ноября 2011

Я думаю, вам нужно использовать тип , а не данные

type Result = Either String [Token] 
...