Пример с факториалом мне не очень нравится, потому что тут использование эксепшна или option — решение, продиктованное никак не сущностью факториала, а только и исключительно слабостью системы типов джавы. В языке, где есть чистые инты и constrained-типы, это бы не понадобилось. Как-то нехорошо показывать элегантные идеи (Вы же, наверное, к аппликативным функторам и idiom brackets ведёте?) следует показывать на неэлегантных примерах.
Кстати, с неущербными примерами всё даже в Хаскеле плохо: Во всех языках с тьюринг-полной рекурсией в качестве примитива, все функции на самом деле не функции, а частичные функции, так что с точки зрения пуриста там весь мир надо оборачивать в idiom brackets для Option и рассматривать композицию функций не как честную композицию функций, а “(f ∘ g) if g terminates, ⊥ otherwise”.
Вот не люблю вот это вот всей душой, но отчего-то никто не пишет на агде, а эпиграмма-2 вообще не готова.
P.S. От души не понимаю, почему Option[T] не назвали Optional[T]. Поскупились на два символа, а как испортили дело. Either тоже неудачное название; вполне удачное для типа Either[A, B], в котором A и B играют симметричные роли, и совершенно идиотское для монады, где роли уже вопиюще асимметричны. Уж не знаю, как это следовало назвать, может Alternate[T, AltT], хотя наверное можно и получше выдумать.
no subject
Date: 2012-01-31 05:58 am (UTC)Кстати, с неущербными примерами всё даже в Хаскеле плохо: Во всех языках с тьюринг-полной рекурсией в качестве примитива, все функции на самом деле не функции, а частичные функции, так что с точки зрения пуриста там весь мир надо оборачивать в idiom brackets для Option и рассматривать композицию функций не как честную композицию функций, а “(f ∘ g) if g terminates, ⊥ otherwise”.
Вот не люблю вот это вот всей душой, но отчего-то никто не пишет на агде, а эпиграмма-2 вообще не готова.
P.S. От души не понимаю, почему Option[T] не назвали Optional[T]. Поскупились на два символа, а как испортили дело. Either тоже неудачное название; вполне удачное для типа Either[A, B], в котором A и B играют симметричные роли, и совершенно идиотское для монады, где роли уже вопиюще асимметричны. Уж не знаю, как это следовало назвать, может Alternate[T, AltT], хотя наверное можно и получше выдумать.