2016-10-25 2 views

ответ

9

Это 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] также содержит конечные списки.

+0

Большое спасибо) – bjornmelgaard

Смежные вопросы