在Haskell 98模拟Existential quantification

May 10, 2013

Existential quantification可以用来实现异质列表,Haskell 98虽然不支持,但是还是可以模拟一下。能不能完全模拟我还不清楚,不过实现异质列表是没问题的。

思路就是把函数部分应用到数据之后(结果类型要相同)再放到一个新的data type里。

Haskell 98:

newtype ShowBox = ShowBox { _show :: String }

mkShowBox x = ShowBox (show x)

list = [mkShowBox 1, mkShowBox 'A', mkShowBox "Hello"]

这其实就是直接把String包装起来,这和下面这个本质是一样的:

list = [show 1, show 'A', show "Hello"]

这时候ExistentialQuantification其实没什么用。