Ramda 有提供 T
及 F
,Sanctuary 有提供 I
,這些都是非常好用 Function,事實上 _ => Nothing
亦經常使用,亦可簡化成 N
。
Version
Wink-fp 1.28.5
toMaybe
import { isNil } from 'ramda'
import { Just, Nothing, ifElse } from 'sanctuary'
let toMaybe = ifElse (isNil) (_ => Nothing) (Just)
toMaybe (2) // ?
toMaybe (null) // ?
toMaybe (undefined) // ?
使用 ifElse
組合 toMaybe
,將傳入 value 轉成 Just 或 Nothing:
isNil
:判斷傳入 value 回null
或undefined
_ => Nothing
:若為null
或undefined
則回傳 NothingJust
:否則回傳 Just
由於 ifElse
要求所有 argument 都是 function,因此會出現 _ => Nothing
。
N
import { isNil } from 'ramda'
import { Just, ifElse } from 'sanctuary'
import { N } from 'wink-fp'
let toMaybe = ifElse (isNil) (N) (Just)
toMaybe (2) // ?
toMaybe (null) // ?
toMaybe (undefined) // ?
Wink-fp 已經內建 N
,可直接使用取代 _ => Nothing
。
N :: * -> Nothing
回傳 Nothing 的 function
*
:任意 value
Nothing
:回傳 Nothing
Conclusion
- 由於 Nothing 為 value 而非 function,所以才會出現
_ => Nothing
情況,可使用N
讓 code 更精簡