Size: a a a

2021 April 12

к

кана in Haskell
ConsE это конструктор, который принимает два значения: значение типа a и значение типа NList a, и возвращает значение типа NList a
источник

к

кана in Haskell
имя конструктора я выбрал произвольно, да
источник

UT

Unknown T. in Haskell
NList — тоже конструктор, правильно?
источник

к

кана in Haskell
NList это уже конструктор типа, NList a - тип
источник

к

кана in Haskell
чуть ниже я там дал пример где конструкторы это не (Empty, ConsE, ConsL) а (E, :+, :*)
источник

UT

Unknown T. in Haskell
Я всё это время осмысливаю ). Вроде понятнее, спасибо. Буду пробовать
источник

к

кана in Haskell
там логика какая

вот у нас есть какой-то список xs

мы можем в начало к нему добавить элемент x через ConsE и получить новый список, где голова - элемент x и хвост - xs : ConsE x xs

а можем добавить в начало к нему список ys, и получить список, где в голове ys, а в хвосте xs : ConsL ys xs
источник

UT

Unknown T. in Haskell
А почему я не могу сделать так просто?
data MyList a = Elem a | List [MyList a]
источник

UT

Unknown T. in Haskell
Из-за того, что это будет допускать [1, [2], 3, [1,2]]?
источник

JS

Jerzy Syrowiecki in Haskell
можете, но это другой смысл будет иметь

List [Elem 1, List [Elem 2], Elem 3]
источник

к

кана in Haskell
мой вариант тоже это допускает, я думал в этом и смысл - такое допускать
источник

JS

Jerzy Syrowiecki in Haskell
а вам это надо или не надо?
источник

UT

Unknown T. in Haskell
Идеальный вариант — допускать исключительно [element, [element, [element, …]]]
Но если это слишком сложно, оставлю так )
источник

к

кана in Haskell
это уже [] по определению
источник

UT

Unknown T. in Haskell
что значит [] по определению?
источник

к

кана in Haskell
тип списка из стандартной библиотеки
источник

UT

Unknown T. in Haskell
Тип списка — это [element, element, …]
А у меня получается список всегда из 2 элементов: первый — элемент, второй такой же список из 2 элементов
источник

к

кана in Haskell
смотри, в твоем идеальном варианте есть только два конструктора

первый это [] - пустой список
второй это некий [x, xs] где x - элемент, xs - другий список

теперь смотрим на определение списка (переименовал конструкторы для упрощения):

data List a
 = Nil
 | Cons a (List a)
источник

к

кана in Haskell
[1, 2, 3] это сахар для записи (1 : (2 : (3 : [])))

замени тут a : b на [a, b]
источник

UT

Unknown T. in Haskell
Что значит запись (List a) здесь?
источник