在Haskell函数中使用一种参数化数据类型

Mik*_*ike 1 haskell algebraic-data-types

假设我在Haskell中有一些代数数据类型:

data Foo a = ...
Run Code Online (Sandbox Code Playgroud)

我希望有一个能够"提取"这种类型的功能a并使用它做一些事情,假设它满足某些条件.具体来说,我需要这样的东西:

fun :: Bounded a => Foo a -> a
Run Code Online (Sandbox Code Playgroud)

预期用途如下:

fun foo = maxBound :: a
Run Code Online (Sandbox Code Playgroud)

当然这个符号在Haskell中是不正确的,但我认为我的意图很明确.可以这样做吗?

mb1*_*b14 6

你不需要任何东西,它只是有效.

fun :: Bounded a => Foo a -> a
fun _ = maxBound
Run Code Online (Sandbox Code Playgroud)

编译器知道结果fun将是一个a,因此将调用正确的maxBound.