假设我想定义一个函数,它使用为给定类型定义的常量之一。我试过:
minValue :: (Enum a,Bounded a) => a
minValue = minBound::a
但是函数定义不知道 a 是枚举类型,因为它在声明中指定。
最佳答案
两个似是而非的答案:
删除内部类型签名。
minValue = minBound
虽然这行得通,但它不能很好地“扩展”到需要做更多事情的更大的函数,在这种情况下,
minBound
使用哪种类型可能并不那么明显。这导致我们为类型变量启用词法范围。您可以使用
forall
关键字开始一个作用域;那么该范围内的定义可以引用类型变量。因此:{-# LANGUAGE ScopedTypeVariables #-} minValue :: forall a. (Enum a, Bounded a) => a minValue = minBound :: a
关于haskell - 如何获取函数类型定义中声明的枚举类型的最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312753/