Pull to refresh

Comments 5

Блин, да это Haskell головного мозга :)

Сложно понять цель статьи и её аудиторию.

Можно было написать хорошую статью про то, как вводяться числа через нумералы Черча или по Пеано, но нет зачем-то прикрутили Haskell.

Посылка, что пропали из языка числа, конечно, хороша; но что делать, если языка пропадут списки, или, что еще лучше, алгебраические типы данных; в этом случае Haskell уже не помощник :)

Теперь об аудитории, c одной стороны автор пытается по ходу объяснять очевидные вещи, следовательно, можно предположить о том, что он пишет для людей незнакомых с Haskell

data [a] = [] | a:[a] — определение списка, [] и: — конструкторы, [] — имя типа

С другой стороны, без объяснения, что такое бесточечный стиль, понять следующее сложно

incN = MkN.(():).toList;

Да и с читаемостью проблемы, особенно с

data () = ()

P.S. Я сам идиот — habrahabr.ru/blogs/personal/43855/
P.S. убило :)
это SQL головного мозга?
Посылка, что пропали из языка числа, конечно, хороша; но что делать, если языка пропадут списки, или, что еще лучше, алгебраические типы данных; в этом случае Haskell уже не помощник :)


Достаточно чтобы в языке остались лямбда-абстракции, т.е. функции высшего порядка.
Если пропадут списки — не беда, их можно декларировать заново (что, собственно, и было сделано). Не станет функций вроде flip, ($) или map — тоже. Но, действительно, исчезновение алгебраических типов, как возможности описания новых типов, доставит гораздо больше хлопот :)

Впрочем, лямбда-абстракция всегда с нами. Вот только к вы предложите использовать её, ведь предложенный Черчем алгоритм построения чисел не удовлетворяет требованиям типизированного лямбда-исчисления, ведь нет единой для всех нумералов сигнатуры, построенной только с использованием конструктора (->).

P.S. Цель статьи и её аудитория сложно понять, как сказал shai_xylyd двумя постами выше, и мне также. Однако, где-то полгода-год назад мне бы подобная статья понравилась. Я тогда вообще с любопытством читал о всяком разном в таком духе. Посему я думаю, что может найтись кто-то, кому статья понравится.
А зачем приплетать списки, если и без них всё хорошо через те же аксиомы Пеано?
data Nat = Zero | Succ Nat deriving (Eq, Show) 

instance Num Nat where
  Zero + a = a
  a + Zero = a
  a + Succ b = Succ (a + b)
  Zero * a = Zero
  a * Zero = Zero
  a * Succ b = a*b + a
  abs = id
  signum Zero = 0
  signum _ = 1
  fromInteger 0 = Zero
  fromInteger (x+1) = Succ (fromInteger x)
Sign up to leave a comment.

Articles

Change theme settings