型別檢查是 Sanctuary 的一大特色,但有些時候型別檢查反而會造成使用上不便,可視需求暫時不使用型別檢查。
Version
Sanctuary 3.1.0
zip
mport { zip } from 'sanctuary'
let data1 = 'dog'
let data2 = 'rabbit'
let f = zip
f (data1) (data2) // ?
zip
在 Ramda 與 Haskell 都可用於 String,但由於 Sanctuary 的 zip
的 type signature 限定在 Array a,因此無法用在 String。
create
import { create, env } from 'sanctuary'
let { zip } = create ({ checkTypes: false, env })
let data1 = 'dog'
let data2 = 'rabbit'
let f = zip
f (data1) (data2) // ?
Sanctuary 提供以 create
根據 checkTypes
動態產生 function 方式:
false
:回傳無型別檢查版本的 functiontrue
:回傳有型別檢查版本的 function,如同直接從sanctuary
import 一樣
unchecked
import S from 'sanctuary'
let { unchecked: { zip }} = S
let data1 = 'dog'
let data2 = 'rabbit'
let f = zip
f (data1) (data2) // ?
Sanctuary 另外提供了 unchecked
module,專門提供不做型別檢查的 function。
import S from 'sanctuary'
let { pipe, unchecked: { zip }} = S
let data1 = 'dog'
let data2 = 'rabbit'
let f = pipe ([
zip
])
f (data1) (data2) // ?
第 1 行
import S from 'sanctuary'
let { pipe, unchecked: { zip }} = S
若要同時使用 checked function 與 unchecked function,可先使用 S
default import,再從 S
destructure 出 function。
Conclusion
- Sanctuary 實務上建議優先使用有型別檢查 function,若有些檢查過於嚴格導致使用不便,才建議使用
create
或unchecked
module 產生無型別檢查 function