0

简短版本:我想为一种类型的函数起别名,type myType = [Int] -> (Tree Int,[Int])但要多态(这意味着我可以放入任何东西而不仅仅是Ints)。我怎么能这样做?

长版:我目前有:

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 的类型签名中没有给出”

4

1 回答 1

2

听起来您想参数化类型同义词——elt不能凭空出现。也许你在追求

type Funcs elt = [elt] -> (Tree elt, [elt])

或者你想要一些其他的活页夹,比如type Funcs = forall elt. [elt] -> (Tree elt, [elt]). 但是你还没有说你想要做什么,所以很难说。:-)

于 2013-09-07T05:56:37.717 回答