3

この機能が必要です:

blubb :: ??? -> Int
blubb (n :: Int) = n
blubb (n :: Char) = 42

これがどのように機能するかです: 関数は を取得し、Intそれを返します。関数が を取得した場合Char、定数値が返され、その他の場合は関係ありません。

Haskell の型システムのため、不可能かもしれませんが、これを機能させる必要があります...

4

1 に答える 1

8

これが型クラスの目的です。

class Blubb t where
    blubb :: t -> Int


instance Blubb Int where
    blubb n = n

instance Blubb Char where
    blubb _ = 42

これは、 と の両方で機能するようにオーバーロードしblubbます。コンパイラは、引数の型に基づいて、使用する正しいものを選択します。IntChar

ただし、実際に必要な場所で型クラスを使用していないことに注意してくださいEither。あなたは実際にこれを望んでいたかもしれません:

blubb :: Either Int Char -> int
blubb (Left  n) = n
blubb (Right _) = 42
于 2013-01-13T15:19:20.677 に答える