让我们说我在Haskell中有一些代数数据类型:
data Foo a = ...
我想要一个可以提取"的功能。这种类型a
并对其做一些事情,假设它满足某些条件。具体来说,我需要这样的东西:
fun :: Bounded a => Foo a -> a
预期用法如下:
fun foo = maxBound :: a
当然这个符号在Haskell中是不正确的,但我认为我的意图很明确。有可能做这样的事吗?
答案 0 :(得分:6)
你不需要任何东西,它只是有效。
fun :: Bounded a => Foo a -> a
fun _ = maxBound
编译器知道fun
的结果是a
,因此会调用正确的maxBound
。