Size: a a a

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

2019 June 04

ЗП

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

KV

Kirill Valyavin in PureScript — русскоговорящее сообщество
В пурсе нет нативных экзистенциалов?
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
для того чтобы понимать в чём она, нужно понимать, для чего exists. я думаю, я буду придумывать, как распараллелить c (ну, типа data C = CA | CB, хотя в моём случае c желательно, чтобы не был заранее известен).
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Kirill Valyavin
В пурсе нет нативных экзистенциалов?
нет
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Anton Kotenko
для того чтобы понимать в чём она, нужно понимать, для чего exists. я думаю, я буду придумывать, как распараллелить c (ну, типа data C = CA | CB, хотя в моём случае c желательно, чтобы не был заранее известен).
заглянул в исходники purescript-exists, забавно
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
вот и я узнал что-то новенькое, никогда этим не пользовался
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
я не собирал код, ищи проблему
и там не так много комбинаций, Exists не помогает, как я понимаю
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
т.е. нужно определить некий тип, который хранит a и ф-цию, которая позволяет "отобразить" этот a в какой-то конкретный тип
e.g:
data Foo a = Foo a (a → String)
type FooE = Exists Foo
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Vasiliy Yorkin
т.е. нужно определить некий тип, который хранит a и ф-цию, которая позволяет "отобразить" этот a в какой-то конкретный тип
e.g:
data Foo a = Foo a (a → String)
type FooE = Exists Foo
в данном случае:

data DifferentFoosF d c = DifferentFoosF (String -> c)
newtype DifferentFoos d = DifferentFoos (Exists (DifferentFoosF d))


так?
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
всё равно не компилится, может и правда должно в Хаскеле, но пурса не может
источник

AK

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

ЗП

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

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
haskell:

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

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
purescript:

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

Kirill Valyavin in PureScript — русскоговорящее сообщество
Почти так же страшно, как GADTs
источник

ЗП

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

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
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)
источник

λ

λоλторт in PureScript — русскоговорящее сообщество
Григорий Хорош
И когда решил начать изучать функциональщину, был выбор между elm и purescript. Выбрал purescript, т.к., на сколько я понимаю, elm на беке не очень
только если "не очень" значит "никак"
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
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)
источник

ЗП

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