Size: a a a

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

2019 January 18

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
спасибо, врубился
decidable equality короче) понятно теперь как это работает
источник

VY

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

ЗП

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

ЗП

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

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
ого, да, это крутое расширение
щас пример посмотрел
data Rose f a = Branch a (f (Rose f a))

instance (Eq a, forall b. (Eq b) => Eq (f b))
      => Eq (Rose f a)
 where ...
(хотя я никогда им не пользовался в х-е)
но по факту да, получалось бы лаконичнее и не нужно было бы этих тайпклассов лишних
источник

ЗП

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

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
class (forall x. Functor (f x)) => Bifunctor f where
 bimap :: forall a b c d. (a -> b) -> (c -> d) -> f a c -> f b d
 lmap :: forall a b c. (a -> b) -> f a c -> f b c
 lmap f = bimap f id

class (forall x. Functor (f x)) => Profunctor f where
 dimap :: forall a b c d. (a -> b) -> (c -> d) -> f b c -> f a d
 lcmap :: forall a b c. (a -> b) -> f b c -> f a c
источник

VY

Vasiliy Yorkin in PureScript — русскоговорящее сообщество
ого, Profunctor1
а откуда это?
источник

ЗП

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

ЗП

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

ЗП

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

ЗП

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

VY

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

ЗП

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

VY

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

ЗП

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

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
data MyFree f a = MyPure a | MyFree (f (MyFree f a))

instance (Eq a, forall b. Eq b => Eq (f b)) => Eq (MyFree f a) where
 (MyPure a) == (MyPure b) = a == b
 (MyFree as) == (MyFree bs) = as == bs
 _ == _ = False
источник

ЗП

Зигохистоморфный Препроморфизм in PureScript — русскоговорящее сообщество
Vasiliy Yorkin
интересно как реализовать Show в случае чего-то такого
import Matryoshka (class Corecursive, Algebra, embed)

-- | Formula expression.
data FormulaF a
 = FooF (Intersection a)
 | BarF (Intersection a)
 -- ...
 | LiteralF String

derive instance functorFormulaF ∷ Functor FormulaF

type Formula = Mu FormulaF
type FormulaAlgebra a = Algebra FormulaF a

derive instance genericFormulaF ∷ Generic FormulaF _
instance showFormulaF ∷ Show a ⇒ Show (FormulaF a) where
 show = genericShow
опять ты через Mu все пишешь
источник

ЗП

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

ЗП

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