Краткая версия: я хочу псевдоним типа функций type myType = [Int] -> (Tree Int,[Int])
, но полиморфно (это означает, что я могу вставить что угодно, а не только Int
). Как я мог это сделать?
Длинная версия: у меня сейчас есть:
data Colour = R | B deriving (Show, Read, Eq)
data Tree elt = E | T Colour (Tree elt) elt (Tree elt) deriving (Show, Read, Eq)
type Set a = Tree a
Я хотел бы иметь:
type Funcs = [elt] -> (Tree elt, [elt])
а затем напишите несколько функций, которые будут иметь тип Funcs
treeify_zero :: Treeify_t
treeify_zero lst = (E,lst)
treeify_one :: Treeify_t
treeify_one (h:t) = ((T R E h E), t)
Как это. В настоящее время я не могу заставить type Funcs = forall elt. [elt] -> (Tree elt, [elt])
нормально работать в GHCi. и если я использую type Funcs elt = [elt] -> (Tree elt, [elt])
, GHCi жалуется, что мои определения treeify_zero/one
"должны иметь 1 аргумент, но не имеют ни одного аргумента. В сигнатуре типа для `to': to::Treeify_t"
Tre
, но подумал, что было бы лучше назвать егоTree
, когда задавал вопрос. Я не изменил все экземпляры, приводящие к этим опечаткам. но теперь я их исправил - person C.E.Sally   schedule 07.09.2013