Haskell извлекает список из списка списков - PullRequest
0 голосов
/ 24 апреля 2018

Получил это:

group167 :: (Eq a, Ord a) => [a] -> [[a]]
group167 = DL.group . DL.sort

Где DL - импортированный квалифицированный Data.List как DL.Очевидно, это возвращает список списков, но как подняться на один уровень вверх и сделать его простым списком (один уровень)?Просто мне любопытно.Нет прямой необходимости знать, просто хочу понять.Имейте чувство медленно, но обязательно начните видеть логику в Haskell.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Если вы не хотите, чтобы похожие элементы были сгруппированы вместе, не вызывайте group.

don'tGroup167 :: Ord a => [a] -> [a]
don'tGroup167 = DL.sort

В сторону: ограничение Eq a не нужно.Ord a подразумевает Eq a.

0 голосов
/ 24 апреля 2018

Попробуйте concat, который доступен через Prelude, Data.List или Data.Foldable. Насколько конкретна эта concat функция будет зависеть от пакета и вашей ghc версии (т. Е. Работает ли она на [[a]] или Foldable t => t [a])

Также обратите внимание на Control.Monad.join, который является более сильной абстракцией концепции "сглаживания" .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...