私は、次のタイプがあります:私は、人のインスタンスへの傷害を持ち上げる機能を作成しようとしているレコード構文を使用してデータコンストラクタに持ち上げる?
data Person a = {name :: String, age :: Int, injury :: Injury a}
data Injury a = Physical a | Mental a
を:
liftInjury :: Person a -> Injury a -> Person a
liftInjury person inj = person {injury = int}
class Hospital i where
admit :: Person a -> i -> Person a
instance Hospital (Injury a) where
admin person inj = liftInjury person inj -- ERROR
がエラー:
Couldn't match type ‘a’ with ‘a1’
‘a’ is a rigid type variable bound by
the instance declaration
コンパイラがa
が拒否されたことをliftInjury
がのa
と同じであることがわからないために発生していますか?
これに最適な解決策は何ですか?
私はあなたの病院のクラスで機能的な依存関係のようなものを使うことができると思います。しかし今は完全な答えを書く時間がありません – epsilonhalbe
なぜ「病院」はクラスである必要がありますか? –
@BenjaminHodgson複数のデータ型を扱えるようにするためには、関数が必要です.. '傷害a'、'複雑化a'など... –