Тип seq<'T>
является основным способом написания вычислений, которые работают для любых коллекций в F #.Существует несколько способов работы с типом:
- Вы можете использовать функции из модуля
Seq
(например, Seq.filter
, Seq.windowed
и т. Д.) - Вы можете использовать понимание последовательности (например,
seq { for x in col -> x * 2 }
) - Вы можете использовать базовый (императивный) тип
IEnumerator<'T>
, который иногда необходим, например, если вы хотите реализовать собственное архивирование коллекций (это возвращаетсяВызов GetEnumerator
)
Это относительно простой тип, и его можно использовать только для чтения данных из коллекций.В результате вы всегда получите значение типа seq<'T>
, которое по сути является ленивой последовательностью.
F # не имеет никакого механизма для преобразования коллекций (например, универсальная функция, принимающая коллекцию C
в коллекциюC
с новыми значениями) или любой механизм создания коллекций (который доступен в Haskell или Scala).
В большинстве практических случаев я не вижу проблем - большая часть работы можетсделать это с помощью seq<'T>
, и когда вам нужна специализированная коллекция (например, массив для производительности), вам, как правило, нужна немного другая реализация.