3

caseこの例の (動作しない) コードのように、Haskell で 2 つの無関係な型の間で式を使用することは可能ですか?

data A = A
data B = B

f x = case x of
  A -> 1
  B -> 2

main = do
  print $ test A
  return ()

ここで使用できることはわかっていEitherますが、このコードは使用することを意図したものではありません。Haskell の型システムを深く学び、何ができるか見てみたいと思います。

4

3 に答える 3

1

f に対して独自の型クラスを作成するのではなく、ghc でサポートされている Typeable クラスを使用できます。ここでは Dynamic を使用する必要はありませんが、場合によっては必要になります。

{-# LANGUAGE DeriveDataTypeable #-}
import Data.Dynamic

data A = A deriving (Typeable)
data B = B deriving (Typeable)

f x | Just A <- fromDynamic x = 1
    | Just B <- fromDynamic x = 2

f2 x | Just A <- cast x = 1
     | Just B <- cast x = 2

main = do
  print $ f (toDyn A)
  print $ f2 A
于 2013-08-01T20:37:28.763 に答える