[personal profile] sassa_nf
Оказывается, не так просто отказаться от ООП мировосприятия. Что больше всего раздражало, так это отсутствие у IO всяких "getter и setter". Нет, ну, правда: как может что-то заниматься полезным вычислением, если ему нельзя ничего set и даже нельзя ничего get? Как можно общаться с функциями, результат которых (IO a), если потом "из" (IO a) ничего нельзя вынуть?

А вот и не нужно ничего ниоткуда вынимать! Нужно этому IO сказать, что делать! А как же результат, даже результат не отдаст? Дык, не отдаст, если не вам это положено. Односторонняя такая связь. Асинхронная? Асинхронная!

Вот именно, что List да Maybe преподносятся таким образом, будто это контейнеры с удобными ручками. Если рассматривать с т.з. ООП, то чуда особенно и не видно. Ну, контейнер, ну, структура у него private и никак извне не доступна, ну, параметризовали эту private часть "генериком" - эка невидаль. А вот нифига это не контейнеры.

Если хотите, у IO всё настолько private, что нельзя узнать вообще ничего. И тем не менее, можно задать собственные вычисления. Просто нужно перестать думать "дай x, дай y, я тебе верну x*y", а нужно думать "возьми x, возьми y, и вычисли x*y". И нужно перестать думать, куда результат денется - за ним придут.

do
  x <- xs
  return $ f x
- это совсем не "get x из xs, set f x". Это "у вас там внутри есть x, так примените к нему f". x в данном месте всего-лишь placeholder аргумента, чтобы был ясен его тип и происхождение. Потому как у IO нет способа get x из xs. Есть только способ завернуть в монаду f.

Date: 2013-01-14 07:40 pm (UTC)
From: [identity profile] sassa-nf.livejournal.com
Да, с линзами понятно, и с линзами "оно" от просто ООП не отличается особо. Тут как раз прорыв осознания был, как это можно работать с монадой, когда ни геттера, ни сеттера нету.

Profile

sassa_nf

February 2026

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2026 07:56 am
Powered by Dreamwidth Studios