一个人如何实现一个以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)
但这会返回类型错误。
答案 0 :(得分:8)
Bool
是Enum
的一个实例:您可以枚举Bool
的两个值:False
,然后是True
。
因此,它实现了fromEnum :: Enum a => a -> Int
,该函数将Enum
类型的值映射到Int
:对于Bool
,它将映射{{ 1}}至False
,以及0
至True
。
所以我们可以这样使用:
1
或者例如,带有条件列表:
result = 5 - fromEnum cond1 - fromEnum cond2
其中result = 5 - sum (map fromEnum [cond1, cond2, cond3])
和cond1
等是类型cond2
的表达式。