2
私はこのようなData.Maybe.monad
を使用する関数があります。短絡する「面白くない」例
typeCheck ν (f · e) =
typeCheck ν e >>= λ { (u , e′) →
typeCheck ν f >>= λ { (u′ ▷ t , f′) →
u !≡ₜ u′ >>= λ { refl →
pure (, (f′ · e′)) };
_ → nothing }}
を_ → nothing
ケースをなくす、あるいは少なくともアップ(似たさらにそれを移動するためのいずれかの方法はあります次のようなものが得られます。
typeCheck ν (f · e) =
typeCheck ν e >>= λ { (u , e′) →
typeCheck ν f >>= λ { _ → nothing; (u′ ▷ t , f′) →
u ≡!ₜ u′ >>= λ { refl →
pure (, (f′ · e′)) }}}