若出現 Nested Chain,可使用 unnest()
從內層攤平一層 Chain。
Version
Ramda 0.27.1
Nested Array
import { unnest } from 'ramda'
let data = [[1], [2], [3]]
let f = unnest
f(data) // ?
當有 Nested Array 時,unnest()
會從內側將一層 Array 攤平。
unnest()
[[a]] -> [a]
將兩層 Array 從內層攤平一層 Array
[[a]]
:data 為 Nested Array
[a]
:回傳一層 Array
import { unnest } from 'ramda'
let data = [[[1, 2, 3]]]
let f = unnest
f(data) // ?
若為三層 Array,一樣從內側開始攤平成兩層 Array。
Nested Maybe
import { unnest } from 'ramda'
import { Just } from 'sanctuary'
let data = Just(Just(1))
let f = unnest
f(data) // ?
unnest()
是用於 Chain,由於 Maybe Monad 也是 Chain,因此也適用。
將 Nested Maybe 攤平成一層 Maybe。
unnest()
Chain m => m (m a) -> m a
將兩層 Chain 從內層攤平一層 Chain
Chain m
:m
為 Chain
m (m a)
:data 為 Nested Chain
m a
:回傳一層 Chain
Nested Pair
import { unnest } from 'ramda'
import { Pair } from 'sanctuary'
let data = Pair('foo')(Pair('bar')('baz'))
let f = unnest
f(data) // ?
unnest()
亦適用於 Nested Pair。
Function
import { unnest, multiply } from 'ramda'
let square = unnest(multiply)
square(5) // ?
Function 也是 Chain,因此也適用於 unnest()
。
multiply()
有兩個 argument,當使用 unnest()
時,將降為一個 argument,且兩個 argument 值相同。
unnest()
(r -> r -> a) -> (r -> a)
將 binary function 轉為 unary function
r -> r -> a
:data 為 binary function
r -> a
:回傳為 unary function
Conclusion
- Ramda 的
unnest()
相當於 Sanctuary 的join()
- 由於 Maybe 、Pair、Function 亦是 Chain,因此也可使用
unnest()