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