Size: a a a

PureScript — русскоговорящее сообщество

2019 June 05

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
все это есть Representation theorem
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Каждый моноид (M, (+) e) есть подмоноидом моноида эндоморфизмов на M
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
моноид эндоморфизмов есть (M -> M, Compose, Id)
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Anton Kotenko
Немного другой вариант, попроще, просто для истории, необходимо было, чтобы X и Y тоже могли быть data, не только newtype

class MyClass d c where fn ∷ c → d

data Foo d c = Foo { f1 :: c, f2:: d }
type FooE d = Exists (Foo d)

mkFooE :: forall d c. (MyClass d c) => Foo d c -> FooE d
mkFooE = mkExists

newtype DifferentFoos d = DifferentFoos (Map.Map String (FooE d))

data X = XZ | XW
data Y = YQ | YU

data F = FG | FH

instance myClassXF ∷ MyClass F X where fn _ = FG
instance myClassYF ∷ MyClass F Y where fn _ = FH

foos' ∷ DifferentFoos F
foos' =
   let
       fooA :: Foo F X
       fooA = Foo { f1 : XZ, f2 : FG }
       fooB :: Foo F Y
       fooB = Foo { f1 : YQ, f2 : FH }
   in
       DifferentFoos
           $ Map.insert "y" (mkFooE fooA)
           $ Map.singleton "x" (mkFooE fooB)
А можно ли сделать похожий Exists для двух параметров?

типа data Bar w x y z = ..., где w x фиксированы, а y и z вариативны?
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
data Bar1 w x y z = Bar1 w x y z`
newtype Bar2 w x y = Bar2 (Exists (Bar1 w x y))
newtype Bar w x = Bar (Exists (Bar2 w x))
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
data Bar1 w x y z = Bar1 w x y z`
newtype Bar2 w x y = Bar2 (Exists (Bar1 w x y))
newtype Bar w x = Bar (Exists (Bar2 w x))
"Could not match kind Type with kind Type -> Type" на Bar2 внутри Exists
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
а нет, прошу прощения
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
@shamansir в общем можно и упороться, мб можно как-то схлопнуть вложенный forall
newtype Bar x y = Bar (forall r1. (forall z. (forall r2. (forall w. (x -> y -> z -> w) -> r2) -> r2) -> r1) -> r1)
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
эквивалентно тому, что я написал раньше
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
но немного мозговыносяще
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Exists можно переписать
newtype Exists1 f = Exists1 (forall r. (forall a. f a -> r) -> r)

mkExists1 ∷ forall f a. f a -> Exists1 f
mkExists1 fa = Exists1 (\f -> f fa)

runExists1 ∷ forall f r. (forall a. f a -> r) -> Exists1 f -> r
runExists1 e (Exists1 f) = f e

но идея через unsafeCoerce типа быстрее работает что-ли
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
data Bar1 w x y z = Bar1 w x y z`
newtype Bar2 w x y = Bar2 (Exists (Bar1 w x y))
newtype Bar w x = Bar (Exists (Bar2 w x))
мне подходит первый, но упоротые варианты помогают пониманию, спасибо)
источник
2019 June 06

p

parket in PureScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
Exists можно переписать
newtype Exists1 f = Exists1 (forall r. (forall a. f a -> r) -> r)

mkExists1 ∷ forall f a. f a -> Exists1 f
mkExists1 fa = Exists1 (\f -> f fa)

runExists1 ∷ forall f r. (forall a. f a -> r) -> Exists1 f -> r
runExists1 e (Exists1 f) = f e

но идея через unsafeCoerce типа быстрее работает что-ли
Да, в PS вроде волшебный unsafe coerce.
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
parket
Да, в PS вроде волшебный unsafe coerce.
такой же как везде
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
можно коерсить парадоксы
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
что не гуд
источник

p

parket in PureScript — русскоговорящее сообщество
В смысле, что его оптимизатор полностью убирает, где это возможно, при компиляции.
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
parket
В смысле, что его оптимизатор полностью убирает, где это возможно, при компиляции.
это же просто тождественная функция
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
источник