AK
Size: a a a
AK
AK
RenderableЗП
AK
class (MyClass c d) where
f1 :: c -> d
f2 :: c -> d -> Boolean
f3 :: c -> d -> d
instance xyMyClass :: MyClass X Y where
...
data Foo c d = Foo (MyClass c d => ...)
data DifferentFoos d = DifferentFoos (Map String (forall c. Foo c d))
data X = ...
data Y = ...
myFoo :: Foo X Y
myFoo = Foo ...
myDifferentFoos :: DifferentFoos Y
myDifferentFoos = DifferentFoos $ Map.singleton "test" myFoo
FooAK
myClass заводил именно для этогоAK
Foo этот констрейнт в первую очередь (нельзя сделать инстанс Foo не удовлетворив этот констрейнт)λ
VY
ГХ
ГХ
AK
class MyClass c d
instance myClassCAD :: MyClass CA D
instance myClassCBD :: MyClass CB D
newtype Foo c d = Foo (MyClass c d => c /\ d)
data DifferentFoos d =
DifferentFoos (forall c. Map String (Foo c d))
data CA = CA
data CB = CB
data D = D
cad :: Foo CA D
cad = Foo (CA /\ D)
cbd :: Foo CB D
cbd = Foo (CB /\ D)
myDifferentFoos :: DifferentFoos D
myDifferentFoos = DifferentFoos
$ Map.insert "cad" cad
$ Map.singleton "cbd" cbd
CA и CB, которые подставляются на место c, а D — всегда d)ГХ
ЗП
class MyClass c d
instance myClassCAD :: MyClass CA D
instance myClassCBD :: MyClass CB D
newtype Foo c d = Foo (MyClass c d => c /\ d)
data DifferentFoos d =
DifferentFoos (forall c. Map String (Foo c d))
data CA = CA
data CB = CB
data D = D
cad :: Foo CA D
cad = Foo (CA /\ D)
cbd :: Foo CB D
cbd = Foo (CB /\ D)
myDifferentFoos :: DifferentFoos D
myDifferentFoos = DifferentFoos
$ Map.insert "cad" cad
$ Map.singleton "cbd" cbd
CA и CB, которые подставляются на место c, а D — всегда d)AK
class MyClass c d
instance myClassCAD :: MyClass CA D
instance myClassCBD :: MyClass CB D
newtype Foo c d = Foo (MyClass c d => c /\ d)
data DifferentFoos d =
DifferentFoos (forall c. Map String (Foo c d))
data CA = CA
data CB = CB
data D = D
cad :: Foo CA D
cad = Foo (CA /\ D)
cbd :: Foo CB D
cbd = Foo (CB /\ D)
myDifferentFoos :: DifferentFoos D
myDifferentFoos = DifferentFoos
$ Map.insert "cad" cad
$ Map.singleton "cbd" cbd
CA и CB, которые подставляются на место c, а D — всегда d)Could not match type
CB
with type
CA
ЗП
Could not match type
CB
with type
CA
VY
AK
ЗП
data DifferentFoosF d c = DifferentFoosF (Map String (Foo c d))
newtype DifferentFoos d = DifferentFoos (Exists (DifferentFoosF d))
AK
data DifferentFoosF d c = DifferentFoosF (Map String (Foo c d))
newtype DifferentFoos d = DifferentFoos (Exists (DifferentFoosF d))