Haskell:将Bool视为Int

时间:2018-09-05 12:30:54

标签: haskell

一个人如何实现一个以int开头的函数,并且每次(通过有限的可能性)每次从int中减去1(几个(例如5个)布尔值)返回1。

理想情况下的外观是:

function list1 list2 = num
  where
      num = 4
          - (condition from var1 = true)
          - (condition from var2 = true)
          - (so on, so forth as long as needed)

我已经尝试过以下方式实现这些行:

      num = startVal
          - (list1conditional == desiredVal)
          - (etc)

但这会返回类型错误。

1 个答案:

答案 0 :(得分:8)

BoolEnum的一个实例:您可以枚举Bool的两个值:False,然后是True

因此,它实现了fromEnum :: Enum a => a -> Int,该函数将Enum类型的值映射到Int:对于Bool,它将映射{{ 1}}至False,以及0True

所以我们可以这样使用:

1

或者例如,带有条件列表:

result = 5 - fromEnum cond1 - fromEnum cond2

其中result = 5 - sum (map fromEnum [cond1, cond2, cond3]) cond1等是类型cond2的表达式。