Size: a a a

2020 May 06

TZ

Timofey Zakrevskiy in Haskell
спасибо! Это сработает для ArrowApply a => a b c (так как у стрелки де-факто есть инстанс профунктора)
источник

ЗП

Зигохистоморфный Пре... in Haskell
Зигохистоморфный Препроморфизм
вот тебе профункторные варианты (мне надо было написать для линз кое-что)
ppure :: forall p a. Category p => Profunctor p => p a a
ppure = arr identity

pap :: forall p a b x. Category p => Strong p => p x (a -> b) -> p x a -> p x b
pap f x = dimap dup (uncurry identity) (f *** x)
dup :: forall a. a -> Tuple a a
dup = join Tuple
источник

TZ

Timofey Zakrevskiy in Haskell
А у меня ArrowApply s => s (s a r) r
источник

TZ

Timofey Zakrevskiy in Haskell
стрелка в стрелке, там как-то сложнее
источник

TZ

Timofey Zakrevskiy in Haskell
Jerzy Syrowiecki
в base подглядывать можно? там есть
  pure x = ArrowMonad (arr (const x))
у меня ArrowApply s => s (s a r) r
источник

TZ

Timofey Zakrevskiy in Haskell
dup x = (x,x)?
источник

ЗП

Зигохистоморфный Пре... in Haskell
Timofey Zakrevskiy
dup x = (x,x)?
да
источник

ЗП

Зигохистоморфный Пре... in Haskell
в общем можно по разному сделать pap

plift2 
 :: forall p a b b1 b2
  . Strong p
  => Category p
  => Profunctor p
  => (b1 -> b2 -> b)
  -> p a b1
  -> p a b2
  -> p a b
plift2 f x y = dimap dup (uncurry f) $ x *** y

pap1 :: forall p a b x. Category p => Strong p => p x (a -> b) -> p x a -> p x b
pap1 = plift2 ($)

plift2'
 :: forall p f a b b1 b2
  . Representable p f
  => Apply f
  => (b1 -> b2 -> b)
  -> p a b1
  -> p a b2
  -> p a b
plift2' f x y = tabulate \s -> lift2 f (sieve x s) (sieve y s)

pap2 :: forall p f a b x. Representable p f => Apply f => p x (a -> b) -> p x a -> p x b
pap2 = plift2'($)
источник

ЗП

Зигохистоморфный Пре... in Haskell
в первом случае нам нужна категория, во втором репрезентативный профунктор
источник

YS

Yan Shkurinskiy in Haskell
Кстати, а как это работает, что можно констрейнты писать один за одним жирными стрелками?
источник

AV

Alexander Vershilov in Haskell
Foo a => Bar a => Baz a => ?
источник

YS

Yan Shkurinskiy in Haskell
Ага
источник

YS

Yan Shkurinskiy in Haskell
Это из-за ассоциативности? (или подобное?)
источник

к

кана in Haskell
Yan Shkurinskiy
Кстати, а как это работает, что можно констрейнты писать один за одним жирными стрелками?
ну разве есть разница между (a, b) -> c и a -> b -> c ?
источник

YS

Yan Shkurinskiy in Haskell
кана
ну разве есть разница между (a, b) -> c и a -> b -> c ?
ну на уровне типов есть)
источник

к

кана in Haskell
я думаю компилятору все равно, вывести один словарик или кортеж словариков, это может быть и просто синтаксом
источник

ЗП

Зигохистоморфный Пре... in Haskell
Yan Shkurinskiy
Кстати, а как это работает, что можно констрейнты писать один за одним жирными стрелками?
это пурса, но в хаскель тоже так можно
источник

YS

Yan Shkurinskiy in Haskell
Зигохистоморфный Препроморфизм
это пурса, но в хаскель тоже так можно
Я вот в хаскеле и видел
источник

MK

Maxim Koltsov in Haskell
насколько я понимаю, это просто синтаксис
источник

к

кана in Haskell
a => b это же такая же функция, просто a подставляется компилятором
источник