
? animufag ?
18.02.2017
21:18:38
а да

Ilya
18.02.2017
21:20:11
Prelude> let f = (.) (.) (.)
(...) :: (t1 -> t) -> (t2 -> t3 -> t1) -> t2 -> t3 -> t
Prelude> let f = (^2) ... (+)
Prelude> f 3 4
49
у кого нет под рукой интерпретатора

? animufag ?
18.02.2017
21:22:07
(b -> c) -> (a -> a1 -> b) -> a -> a1 -> c ок понятно
ну давайте тогда челендж: сконструировать на точках функцию с типом
(b -> b1 -> c) -> (a -> b) -> a -> b1 -> c
у самого пока нет догадок

Google

Ilya
18.02.2017
21:28:40
просто (.) ?

Kit
18.02.2017
21:29:26
у (.) 2 входных переменных
а тут 4

Ilya
18.02.2017
21:29:46
(.) :: (b -> c) -> (a -> b) -> a -> c
где
c = (b1 -> c)

Kit
18.02.2017
21:30:28

Ilya
18.02.2017
21:31:25
я не очень понимаю, о чём ты говоришь

? animufag ?
18.02.2017
21:31:27
лол

Kit
18.02.2017
21:32:31

? animufag ?
18.02.2017
21:32:40
у (.) 2 входных переменных
(.) :: (b -> c) -> (a -> b) -> a -> c
где
c = (b1 -> c)

Kit
18.02.2017
21:33:19

? animufag ?
18.02.2017
21:34:32
@newrlan как бы (.) сама по себе возвращает функцию. а тут мы ей передаём функцию... ну ты понял. тащемта я сам так норм лажанул с челенджом. хотя по-своему иронично

Google

Ilya
18.02.2017
21:36:18
для тех, у кого нет интерпретатора
op1 f g x y = f (g x) y
op2 = (.)
*Main> :t op1
op1 :: (t1 -> t2 -> t) -> (t3 -> t1) -> t3 -> t2 -> t
*Main> :t op2
op2 :: (b -> c) -> (a -> b) -> a -> c
*Main> op1 (+) (^2) 4 5
21
*Main> op1 (+) (^2) 4 5
21
ч.т.д.

Igor
18.02.2017
21:37:16
что там с идрисом? об эффектах уже рассказали?

Ilya
18.02.2017
21:39:17

? animufag ?
18.02.2017
21:43:45
но вообще я искал по истории идрис. так и не понял про какие конференции речь. мб про ту что сейчас в спб, по выходным.
ещё увидел упоминание f* вообще андеграунд тема. deep web для фп

Igor
18.02.2017
21:46:20
да, речь про курс в CSclub
он уже завтра заканчивается

? animufag ?
18.02.2017
21:47:11
ого
а ну да. 4 дня всего. не понятно зачем репозиторий закрытый

Kit
18.02.2017
21:59:20
а вот такой вопрос
($) (.) = (.)
кто-нибудь размышлял?
или это не так

? animufag ?
18.02.2017
22:02:40
думаю (любая функция $) = этаже функция

Ilya
18.02.2017
22:02:49
+
по сути это можно считать определением $ в безточечной нотации

Google

Ilya
18.02.2017
22:03:33
или даже так ($) = id

Kit
18.02.2017
22:04:19

Ilya
18.02.2017
22:04:37
началось

? animufag ?
18.02.2017
22:05:58
ну если здесь знак равенства считать тем знаком равенства который пишем при определении сущности

Kit
18.02.2017
22:06:07
id шире чем ($)

Ilya
18.02.2017
22:07:25
и что?
op :: (a -> b) -> a -> b
op = id
*Main> op (^2) 4
16

? animufag ?
18.02.2017
22:09:26
(тут я не знаю как это выразить словами... нельзя же сказать слово переменная. и константа тоже не очень)
($) = id ок
id = ($) не ок
в терминах хаскельного =

Ilya
18.02.2017
22:09:28
без явной аннотации типа тоже катит:)

Kit
18.02.2017
22:10:01

? animufag ?
18.02.2017
22:14:22
ну это я про слово сущность.
в общем казус этого диалога в том что @newrlan понимал = как равенство из логики (кто знаком с логикой мб подскажет крутое слово), ну чтобы тип в обе стороны подсталялся

Ilya
18.02.2017
22:14:45
а надо понимать в смысле хаскелловского клауза
мы же изначально говорили именно о них
($) (.) = (.)
думаю (любая функция $) = этаже функция

? animufag ?
18.02.2017
22:17:57
($) (.) = (.)
на тот момент он мог иметь ввиду не хаскельный клауз. а некое абсолютное равенство по типу и семантике.
при том что у $ есть некая своя хитрость при компиляции, но в данном случае она не должна сработать

Kit
18.02.2017
22:18:38
у функции $ на сколько я помню есть приоритет
и у функции (.) тоже приоритет

Google

Ilya
18.02.2017
22:19:00
0, да

Kit
18.02.2017
22:19:39
равенство имелось в виду абсолютное, да
функция (.) должна по приоритету выполниться раньше функции ($)
для меня это вопрос, что там получится
по мотивации, я вас понимаю
и по результату вопроса нет
мне интересно как это в кишках там сработает

Ilya
18.02.2017
22:27:20
а прагма RULES это не из этой области?

? animufag ?
18.02.2017
22:27:35
что это

Ilya
18.02.2017
22:28:41
оптимизирующие выражения
например map f (map g x) = map (f . g) x
можно сказать компилятору, чтобы он заменял все вхождения такие
прагмой RULES

? animufag ?
18.02.2017
22:29:47
да погуглил. и что-то я не хочу такое знать)

Ilya
18.02.2017
22:30:07
то, что слева, на то, что справа

Kit
18.02.2017
22:34:33
все оказалось проще, действительно приоритет играешь важную роль
(.)($) имеет совершенно другую сигнатуру

Ilya
18.02.2017
22:35:21
а можно пример того, о чём речь шла
т.е. какие два выражения не равны?
чтобы можно было прям вбить в ghci

Google

Quet
18.02.2017
22:36:08
мне кажется или вы каким-то фп-онанизмом тут занимаетесь? )

Ilya
18.02.2017
22:36:47
зато не монаду теребим, как тут недавно проскакивало ?

Quet
18.02.2017
22:37:06
даже не знаю что хуже... )

melancholiac
18.02.2017
22:37:28
удачно я сюда заглянул
мне кажется или вы каким-то фп-онанизмом тут занимаетесь? )
зато не монаду теребим, как тут недавно проскакивало ?

Ilya
18.02.2017
22:37:41
ну лично мне, как начинающему, такой "фп-онанизм" гораздо интереснее нюансов установки cabal в докер
которые тут на мой взгляд довольно часто обсуждаются:)

Kit
18.02.2017
22:37:59
λ h = ($) (.)
λ :t h
h :: (b -> c) -> (a -> b) -> a -> c
λ h (+3) (^3) 1
4
λ b = (.) ($)
λ :t b
b :: (a1 -> a -> b) -> a1 -> a -> b
λ b (+3) (^3) 1
<interactive>:45:1: error:
• Non type-variable argument in the constraint: Num (b -> b)
(Use FlexibleContexts to permit this)
• When checking the inferred type
it :: forall b. (Num (b -> b), Num b) => b

Quet
18.02.2017
22:39:29

Kit
18.02.2017
22:39:53
вот бы еще вывод типа функции b понять

? animufag ?
18.02.2017
22:41:25
($) (.) = (.)
(.)($) имеет совершенно другую сигнатуру

Kit
18.02.2017
22:43:34

Ilya
18.02.2017
22:44:51

Kit
18.02.2017
22:45:44
да, клево!