Как представить список списка через это представление типа данных - PullRequest
1 голос
/ 08 июня 2019

используя:

data type List a = Empty | Cons a (List a)

Как можно представить [[a]]?У этого должно быть простое решение, к которому я просто слеп, поэтому чей-то вклад был бы очень признателен, спасибо!

Я пытался использовать List (List a) или List (Cons x xs), но он отвечает «List», а не в области видимости, что для меня имеет смысл.

1 Ответ

4 голосов
/ 08 июня 2019

тип списка списков a действительно List (List a)).Но мы не создаем значение с этим.

Если мы, например, хотим построить список с одноэлементным списком, который содержит 1, мы можем записать это как:

oneList1 :: List (List Int)
oneList1 = Cons (Cons 1 Empty) Empty

Внешний Cons является минусами внешнего списка, так как первый (и единственный) элемент имеет Cons 1 Empty, это внутренний список.Cons h t представляет список с h (здесь 1) головой (первый элемент) и Empty хвостом (оставшиеся элементы).Таким образом, Cons 1 Empty - это одноэлементный список с 1 в качестве единственного значения.

Мы заключаем это во внешние cons Cons (Cons 1 Empty) Empty, что, таким образом, указывает, что внешний список также является одноэлементным списком.Таким образом, oneList1 эквивалентно [[1]].

...