範圍

使用範圍表示法建立從 1 到 10 的列表很簡單:

[1..10]    -- [1,2,3,4,5,6,7,8,9,10]

要指定步驟,請在 start 元素後新增逗號和下一個元素:

[1,3..10]  -- [1,3,5,7,9]

請注意,Haskell 始終將步驟作為術語之間的算術差異,並且你不能指定多於前兩個元素和上限:

[1,3,5..10] -- error
[1,3,9..20] -- error

要按降序生成範圍,請始終指定否定步驟:

[5..1]     -- []

[5,4..1]   -- [5,4,3,2,1]

因為 Haskell 是非嚴格的,所以只有在需要時才會評估列表的元素,這允許我們使用無限列表。[1..] 是從 1 開始的無限列表。此列表可以繫結到變數或作為函式引數傳遞:

take 5 [1..]   -- returns [1,2,3,4,5] even though [1..] is infinite

使用具有浮點值的範圍時要小心,因為它接受溢位超過半增量,以抵禦舍入問題:

[1.0,1.5..2.4]    -- [1.0,1.5,2.0,2.5] , though 2.5 > 2.4

[1.0,1.1..1.2]    -- [1.0,1.1,1.2000000000000002] , though 1.2000000000000002 > 1.2

範圍不僅可以使用數字,還可以使用任何實現 Enum 型別類的型別。給定一些可列舉的變數 abc,範圍語法相當於呼叫這些 Enum 方法:

[a..]    == enumFrom a
[a..c]   == enumFromTo a c
[a,b..]  == enumFromThen a b
[a,b..c] == enumFromThenTo a b c

例如,使用 Bool 就可以了

 [False ..]      -- [False,True]

注意 False 之後的空格,以防止將其解析為模組名稱限定(即 False.. 將從模組 False 解析為 .)。