異質列表我們可以利用對序列在Haskell創建異構列表:哈斯克爾:過濾按類型
type a *: b = (a, b)
a *: b = (a, b)
infixr 5 *:
hlist :: Int *: String *: Maybe Float *:()
hlist = 1 *: "hello" *: Just 3 *:() -- (1, ("hello", (Just 3,())))
有沒有一種方法,我們可以在這些列表上做類型級過濾?也就是說,定義一些多態函數hfilter
例如,對於不同類型的a
,b
,並c
:
hfilter :: a *: b *: c *: a *: b *: a *:() -> a *: a *: a *:()
hfilter :: a *: b *: c *: a *: b *: a *:() -> b *: b *:()
hfilter :: a *: b *: c *: a *: b *: a *:() -> c *:()
hfilter :: a *: b *: c *: a *: b *: a *:() -> ()
對不起編譯問題,我是從我的電話發帖。 – rampion 2012-02-22 14:44:43
好吧,我可以從這裏得到[通過傳遞過濾參數不需要'OverlappingInstances'的版本](https://gist.github.com/1885439)'hfilter :: a - > h - > h'',併爲輸出使用不同的列表。所以'hfilter(undefined :: Int)hlist ::()'是'()','hfilter(undefined :: Int)hlist :: Int:*()'是'1:*()'和'hfilter undefined :: Int)hlist :: Int:* Int:*()'是'1:* 2:*()'。 – rampion 2012-02-22 15:02:39
arg,但需要'OverlappingInstances'來實際使用。 – rampion 2012-02-22 20:19:11