haskell - 如何获取函数类型定义中声明的枚举类型的最小值?

标签 haskell

假设我想定义一个函数,它使用为给定类型定义的常量之一。我试过:

minValue :: (Enum a,Bounded a) => a
minValue = minBound::a

但是函数定义不知道 a 是枚举类型,因为它在声明中指定。

最佳答案

两个似是而非的答案:

  1. 删除内部类型签名。

    minValue = minBound
    

    虽然这行得通,但它不能很好地“扩展”到需要做更多事情的更大的函数,在这种情况下,minBound 使用哪种类型可能并不那么明显。这导致我们

  2. 为类型变量启用词法范围。您可以使用 forall 关键字开始一个作用域;那么该范围内的定义可以引用类型变量。因此:

    {-# LANGUAGE ScopedTypeVariables #-}
    minValue :: forall a. (Enum a, Bounded a) => a
    minValue = minBound :: a
    

关于haskell - 如何获取函数类型定义中声明的枚举类型的最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312753/

相关文章:

haskell - haskell if-then-else 中递归调用 main 时执行多条语句

haskell - 持久内连接还是应该使用 esqueleto?

haskell - 为什么 Int 不可升级?

haskell - 大列表上的单体折叠中的堆栈溢出

Haskell 向操作系统发送键盘信号

list - 将两个列表 ["String",Float] 合并到新列表 ["String",Float,Float]

haskell - Haskell中的重复函数递归

Haskell:从 POSIXTime/NominalDiffTime 中提取 Int

haskell - 在 threepenny-gui 中组合事件和属性

haskell - cabal repl 对库与可执行文件的不同行为