Size: a a a

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

2019 June 04

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Возможно функция?
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Vasiliy Yorkin
ну вот как тут https://wiki.haskell.org/Existential_type
например, определить класс какой-то, вот как там с примером Renderable
перечитаю с новым взглядом, спасибо
источник

ЗП

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

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Anton Kotenko
Плохо ещё разбираюсь в existential и подобных штуках, спрошу вопрос, если он совсем глупый — направьте, пожалуйста, что почитать на эту тему подробнее, чем на HaskellWiki.

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
Такой класс есть, но тут констрейнт внутри Foo
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Ну вот myClass заводил именно для этого
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
имел в виду что у Foo этот констрейнт в первую очередь (нельзя сделать инстанс Foo не удовлетворив этот констрейнт)
источник

λ

λоλторт in PureScript — русскоговорящее сообщество
Григорий Хорош
А кто-то использует purescript в продакшн и для чего?
@graninas даже на бэке его использует
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
а его почему-то тут нет(
источник

ГХ

Григорий Хорош in PureScript — русскоговорящее сообщество
λоλторт
@graninas даже на бэке его использует
Я тоже хочу на беке начать использовать
источник

ГХ

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

ГХ

Григорий Хорош in PureScript — русскоговорящее сообщество
Но блин
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
переписал на PS, в пурсе не компилируется:

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)
источник

ГХ

Григорий Хорош in PureScript — русскоговорящее сообщество
Поддержка во всяких ide не очень
источник

ЗП

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

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

Anton Kotenko in PureScript — русскоговорящее сообщество
Anton Kotenko
переписал на PS, в пурсе не компилируется:

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
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Anton Kotenko
  Could not match type

   CB

 with type

   CA
это не exists у тебя
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
ой, у меня там не то написано короче тоже
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
то есть надо ставить https://github.com/purescript/purescript-exists?
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
data DifferentFoosF d c = DifferentFoosF (Map String (Foo c d))
newtype DifferentFoos d = DifferentFoos (Exists (DifferentFoosF d))
источник

AK

Anton Kotenko in PureScript — русскоговорящее сообщество
Зигохистоморфный Препроморфизм
data DifferentFoosF d c = DifferentFoosF (Map String (Foo c d))
newtype DifferentFoos d = DifferentFoos (Exists (DifferentFoosF d))
тот же результат
источник