С
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
является известным конструктором типов.