Дайте уродливый пример:
data Bighead = Big
little = 1
f1 = little :: Int
f2 = Big :: BigHead
По-моему:
f1
и f2
все указывают на некоторые данные. единственными отличиями (little
и Big
) являются
у маленького кода есть код для оценки. но Big не делает.
Все они имеют перезаписываемое тело, мало что может быть преобразовано из набора данных в результат, а Big просто не делает последнего шага - он всегда держит эти формы данных (но рекурсивно они могут быть оценены).
Но в синтаксической форме они почти одинаковы: их можно применять, их можно оценить.
Одна из больших проблем может заключаться в том, что функции не могут изменять свои применяемые параметры, но данные могут делать.
Это единственная причина, по которой Haskell рассматривает имена данных и функций по-разному?
Вызов для анализа: -)
изменить: еще несколько прокладок
data A = B Int
тип B
:
B :: Int -> A
b :: Int -> A
b = B