Реализация потока от Haskell book (author Anton Kholomiov) (стр 70)Значение толстой кишки с амперсанд в Haskell (: &)
data Stream a = a :& Stream a
Я понимаю, что имел в виду сделать :&
, но не могу найти `S Defenition
Реализация потока от Haskell book (author Anton Kholomiov) (стр 70)Значение толстой кишки с амперсанд в Haskell (: &)
data Stream a = a :& Stream a
Я понимаю, что имел в виду сделать :&
, но не могу найти `S Defenition
Это is определение. Тип Stream
определяет один конструктор данных инфикса, называемый :&
. Сравните
data Stream a = StreamCons a (Stream a)
, который бы определял тот же тип, но создает StreamCons
вместо :&
как конструктор данных.
Конструкторы данных Infix, в отличие от обычных операторов инфикс, должны начать с двоеточия.
С StreamCons
конструктора, ваша constStream
функция будет выглядеть
constStream :: a -> Stream a
-- constStream x = x :& (constStream x)
constStream x = StreamCons x (constStream x)
Та же функция возвращать бесконечный список будет выглядеть
constList :: a -> [a]
constList x = x : (constList x)
:&
служит той же цели как :
, но для Stream a
вместо [a]
. Фактически единственная разница между и []
состоит в том, что Stream a
содержит только значения, представляющие бесконечные последовательностей a
s, а [a]
также содержит конечные списки.
Большое спасибо) – bjornmelgaard