maxBound - minBound
Haskell で任意Enum
の型を計算する方法はないと結論付けるのは正しいBounded
でしょうか? または、いくつかのトリック/ハックがありませんか? これは私が持っているものであり、明らかに機能しません:
difference :: (Enum a, Bounded a) => Int
difference = fromEnum maxBound - fromEnum minBound
エラー:
Foo.hs:37:1:
Ambiguous constraint `Enum a'
At least one of the forall'd type variables mentioned by the constraint
must be reachable from the type after the '=>'
In the type signature for `difference': difference :: (Enum a, Bounded a) => Int
Foo.hs:37:1:
Ambiguous constraint `Bounded a'
At least one of the forall'd type variables mentioned by the constraint
must be reachable from the type after the '=>'
In the type signature for `difference': difference :: (Enum a, Bounded a) => Int
そのエラーが発生する理由は理解できます。 type には実際の用語a
がないため、何が何であるかを理解できませんa
。問題は、これを回避する方法があるかどうかです。