如何编写将所有内容返回给Integer的函数?
即
f True = 1
f False =0
f 1 = 1
f 2.30 = 2
答案 0 :(得分:14)
类型a -> Integer
的唯一函数将是常量函数。这是一个自由定理由类型的参数性保证(由于Haskell的一些不健全的角落,模数有些捏造)。
以下是此类功能的一个示例:
f :: a -> Integer
f _ = 1
答案 1 :(得分:2)
一般情况下没有办法做到这一点,这根本不可取,但你提到的案例和其他一些案例都可以通过丑陋的黑客获得:
f :: Enum n => n -> Integer
f x = toInteger (fromEnum x)
作为一般规则,最好只是假装Enum
类不存在,因为它的设计非常糟糕,而且它的一些实例表现不佳。