LINUX.ORG.RU

Сила Haskell

 ,


0

4

Встретил на хабре полную соплей восторга статеечку. Вот цитата из нее

Как Морфеус в «Матрице», fmap знает, что делать; вы начали с Nothing и закончите тоже с Nothing! Это fmap-дзен. И теперь понятно, для чего вообще существует тип данных Maybe. Вот, например, как бы вы работали с записью в базе данных на языке без Maybe:

post = Post.find_by_id(1)
if post
  return post.title
else
  return nil
end

На Haskell же:

fmap (getPostTitle) (findPost 1)

Если findPost возвращает сообщение, то мы выдаём его заголовок с помощью getPostTitle. Если же он возвращает Nothing, то и мы возвращаем Nothing! Чертовски изящно, а?

источник http://habrahabr.ru/post/183150/

Не, я реально не понимаю, это у чувака реально мозги отсохли от ФП? Неужели второй вариант действительно сильно лучше первого? От чего он там кончает? Ну, не нравится каждый раз писать 3 строчки ветвления, так определи функцию, и все будет так же. На нормальных ЯП это вообще решается на раз, никаких проверок не нужно, и никаких функторов, все из коробки.

base.post1.postTitle
будет то же самое, если нет поста, вернется undefined. В любом случае, в любом ЯП это тривиально, самое трудное, с чем можно столкнуться в реализации — это обработка исключения. Тогда почему он так возбудился? Почему эти адепты ФП сначала орут «Я вам покажу магию хаскела», а в итоге показывают позорную банальщину? Это гипноз чтоли?

Ответ на: комментарий от hateyoufeel

В хаскелле ты не присунешь undefined вместо поста куда не надо.

то есть, в хаскеле нельзя даже вот так:

if(posts.post23)doStuff(posts.post23)
Типы разные, приведения нет, так? Это фича? Как это решается? через жопу монады?

anonimous
() автор топика
Ответ на: комментарий от anonimous

if(posts.post23)doStuff(posts.post23)

Можно, но так пишут только дебилы.

hateyoufeel ★★★★★
()
Ответ на: комментарий от anonimous

doStuff =<< post23 posts

Ты уже 3 месяц (если не больше) пишешь всякую фугню на лоре за это время можно было изучить матчасть и устроиться интерном.

qnikst ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.