ЗП
Size: a a a
ЗП
KV
AK
exists. я думаю, я буду придумывать, как распараллелить c (ну, типа data C = CA | CB, хотя в моём случае c желательно, чтобы не был заранее известен).ЗП
AK
exists. я думаю, я буду придумывать, как распараллелить c (ну, типа data C = CA | CB, хотя в моём случае c желательно, чтобы не был заранее известен).purescript-exists, забавноVY
AK
Exists не помогает, как я понимаюVY
a и ф-цию, которая позволяет "отобразить" этот a в какой-то конкретный типe.g:
data Foo a = Foo a (a → String)
type FooE = Exists FooAK
a и ф-цию, которая позволяет "отобразить" этот a в какой-то конкретный типe.g:
data Foo a = Foo a (a → String)
type FooE = Exists Foodata DifferentFoosF d c = DifferentFoosF (String -> c)
newtype DifferentFoos d = DifferentFoos (Exists (DifferentFoosF d))
AK
ЗП
VY
import qualified Data.Map as Map
class IsFoo a
data X = X
data Y = Y
instance IsFoo X
instance IsFoo Y
data Foo = forall a. (IsFoo a) => Foo a
foos :: [Foo]
foos = [Foo X, Foo Y]
newtype FooMap k = FooMap (Map k Foo)
foos' :: FooMap String
foos' = FooMap
$ Map.insert "y" (Foo Y)
$ Map.singleton "x" (Foo X)
VY
data Rep = RepI Int | RepS String
class HasRep a where rep ∷ a → Rep
data Foo a = Foo a (a → Rep)
type FooE = Exists Foo
mkFooE :: forall a. (HasRep a) => a -> FooE
mkFooE a = mkExists (Foo a rep)
newtype FooMap k = FooMap (Map k FooE)
newtype X = X Int
newtype Y = Y String
instance hasRepX ∷ HasRep X where rep (X n) = RepI n
instance hasRepY ∷ HasRep Y where rep (Y s) = RepS s
foos' ∷ FooMap String
foos' = FooMap
$ Map.insert "y" (mkFooE $ Y "y")
$ Map.singleton "x" (mkFooE $ X 1)
KV
ЗП
ЗП
class IsFoo a
data X = X
data Y = Y
instance isFooX :: IsFoo X
instance isFooY :: IsFoo Y
data Foo = Foo (forall r. (forall a. IsFoo a => a -> r) -> r)
toFoo :: forall a . IsFoo a => a -> Foo
toFoo v = Foo \f -> f v
fromFoo :: forall r. Foo -> (forall a. IsFoo a => a -> r) -> r
fromFoo (Foo f) = f
foos :: Array Foo
foos = [toFoo X, toFoo Y]
newtype FooMap k = FooMap (Map.Map k Foo)
foos' :: FooMap String
foos' = FooMap
$ Map.insert "y" (toFoo Y)
$ Map.singleton "x" (toFoo X)
λ
AK
class IsFoo a
data X = X
data Y = Y
instance isFooX :: IsFoo X
instance isFooY :: IsFoo Y
data Foo = Foo (forall r. (forall a. IsFoo a => a -> r) -> r)
toFoo :: forall a . IsFoo a => a -> Foo
toFoo v = Foo \f -> f v
fromFoo :: forall r. Foo -> (forall a. IsFoo a => a -> r) -> r
fromFoo (Foo f) = f
foos :: Array Foo
foos = [toFoo X, toFoo Y]
newtype FooMap k = FooMap (Map.Map k Foo)
foos' :: FooMap String
foos' = FooMap
$ Map.insert "y" (toFoo Y)
$ Map.singleton "x" (toFoo X)
ЗП