0

短いバージョン: 関数の型を多形的にエイリアスしたいtype myType = [Int] -> (Tree Int,[Int])(つまり、 s だけでなく何でも入れることができる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 の型シグネチャでは何も指定されていません」と文句を言われます。

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 に答える