関数型プログラミング言語Haskell Part11
■ このスレッドは過去ログ倉庫に格納されています
0693デフォルトの名無しさん
2010/03/16(火) 23:33:34Haskellの型変数は、そこにどんな型を代入しても良いということを表す(暗黙の全称量化)
> func1 :: (Class2 b) => a -> b
だから、これだと、func1はClass2のインスタンスであるようなbならどれでも生成できるという意味になる
Class1 Type1の実装ではType2という特定の型の値しか返せないので、これに適合しない
意図としては、func1はClass2の「何らかの」インスタンスbの値を生成する、と言いたいんだろう
そういう場合、Haskell98にはないけど、GHCなら(たぶんHugsでも)存在量化という言語拡張が使える
{-# LANGUAGE ExistentialQuantification #-}
class Class1 a where
func1 :: a -> SomeInstanceOfClass2
class Class2 a where
func2 :: a -> String
data SomeInstanceOfClass2 = forall a. (Class2 a) => SIOC2 a
■ このスレッドは過去ログ倉庫に格納されています