Я заметил, что потоки, похоже, очень похожи на списки, кроме как с постоянным добавлением времени. Конечно, добавление постоянного времени добавления к спискам не слишком сложно, и DList делает именно это.
Предположим для остальной части обсуждения, что либо списки имеют постоянное время, либо что нас просто не интересует.
Моя мысль состоит в том, что списки Haskell должны быть просто реализованы как потоки. Чтобы этого не произошло, я предполагаю, что следующее должно быть выполнено:
- Бывают случаи, когда списки лучше, чем потоки И
- Есть случаи, когда потоки лучше списков.
Мой вопрос: каковы примеры двух вышеуказанных случаев?
Примечание. Для целей этого вопроса, пожалуйста, игнорируйте легко фиксируемые пропуски в конкретных реализациях, которые я обсуждал. Я больше ищу для основных структурных различий здесь.
Дополнительная информация:
Я предполагаю, что часть того, что я получаю здесь, говорит, что если мы пишем [1..1000000]
, делает ли компилятор Haskell (скажем, GHC):
- Составьте список ИЛИ
- Создайте объект с двумя целями: 1 и 1000000, которые полностью описывают список.
Если это случай (1), зачем это делать, поскольку создание промежуточных списков, по-видимому, является ненужным штрафом за производительность?
Или, если это случай (2), то зачем нам нужны потоки?