Короткая версия: Я хочу использовать псевдоним типа функций type myType = [Int] -> (Tree Int,[Int])
, но полиморфно (это означает, что я могу положить что угодно, а не только Int
). Как я могу это сделать?Полиморфные псевдонимы типов в haskell
Длинная версия: Я в настоящее время:
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 аргумент, но не было дано ни В сигнатуре типа для` к ': для :: Treeify_t»
Это 'Tree' или' Tre'? –
@ KarolyHorvath: в моем собственном источнике я назвал его 'Tre', но подумал, что лучше задать его имя« Дерево », задавая вопрос. Я не изменил все экземпляры, приводящие к этим опечаткам. но теперь я исправил их –