【发布时间】:2021-01-12 00:46:11
【问题描述】:
我需要 bind/flatMap/>>= 而不是 Dhall 的 Optional。
我找不到它的实现并想出了我自己的。
let bindOptional
: ∀(a : Type) → ∀(b : Type) → (a → Optional b) → Optional a → Optional b
= λ(a : Type) →
λ(b : Type) →
λ(f : a → Optional b) →
λ(o : Optional a) →
Prelude.Optional.fold a o (Optional b) f (None b)
然后我按如下方式使用它
bindOptional Outer Inner (λ(x : Outer) → x.inner) outer
Prelude中真的没有定义这样的函数吗?我想我可能错过了。
此外:
-
有没有更惯用的定义方式?
-
是否有可能利用类型推断并缩短调用时间?类似的东西
bindOptional _.inner outer -- the compiler infers `Outer` from `outer` and `Inner` from `_.inner`
我试图不提供类型参数,但似乎不可能(根据我对语言的有限了解)。
【问题讨论】:
标签: functional-programming flatmap dhall