Top.Mail.Ru
? ?
kouzdra [entries|archive|friends|userinfo]
kouzdra

[ website | www.kouzdra.org ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Кстати о монадологии [Apr. 14th, 2016|10:14 pm]
kouzdra
Ну когда на хаскеле писал - посмотрел в доки по библиотекам (была мысля на массивы посадить - только не понял как это сделать, так чтобы оно было более осмысленно, чем на списках) - там же всякие правила они пишут типа:
class Functor f where Source

The Functor class is used for types that can be mapped over. 
Instances of Functor should satisfy the following laws:

fmap id  ==  id
fmap (f . g)  ==  fmap f . fmap g

The instances of Functor for lists, Maybe and IO satisfy these laws.
В хаскеле это все на уровне "на честность программиста" (ну и компилятор про них на сам деле мало чего знает.

А вот во всяких Agda-х и Idris-aх же вроде такое должно формально выражаться. И даже до какой-то степени доказываться. Никто не пробовал т-сть твердую научную основу под это дело подложить?
LinkReply

Comments:
[User Picture]From: rdia
2016-04-15 01:23 am (UTC)
1. А монады тут при чём?

2. Таки неужели можно это отследить?

3. Если функции f и g чистые, то map f.g = map f.map g - тривиально. Чистоту функций можно с хорошей точностью отследить даже для Цэ-Пэ-Пэ.

Собственно, я не понимаю, почему Цэ-Пэ-Пэ компиляторы не отслеживают это самостоятельно, и не распараллеливают автоматом. И почему нет директивы pure. И, кстати, не понимаю, почему директиву const нужно обязательно ставить ручками.

4. В Хачкеллях вроде бы все функции чистые => утверждение тривиально?
(Reply) (Thread)
[User Picture]From: kouzdra
2016-04-15 03:53 am (UTC)
1. Functor - смежный класс

2. Отследить нельзя в общем случае - но можно формализовать и вполне вероятно - проверить доказательство (а Agda и Idris как раз тем и интересны, что в них можно доказательства расписывать)

3. Это тривиально при условии что map - действительно map - что тут как раз частично и постулируется как существенное свойство реализации функтора
(Reply) (Parent) (Thread)
[User Picture]From: rdia
2016-04-15 04:05 am (UTC)
Кстати, возьмём функцию cap: для любых f и g (таких, что существует f.g) и списков lst у нас (cap f.g) == (cap f).(cap g); любая ф-я (cap z) сохраняет длину списка. Можно ли выбрать такую cap, что cap != map?
(Reply) (Parent) (Thread)