Syntax “短路”;“无趣”;一元计算中的实例

Syntax “短路”;“无趣”;一元计算中的实例,syntax,pattern-matching,monads,agda,Syntax,Pattern Matching,Monads,Agda,我有一个使用数据的函数。可能.monad如下: typeCheck ν (f · e) = typeCheck ν e >>= λ { (u , e′) → typeCheck ν f >>= λ { (u′ ▷ t , f′) → u !≡ₜ u′ >>= λ { refl → pure (, (f′ · e′)) }; _ → nothing }} 有没有办法消除\→ 不使用任何大小写,或者至少将其进一步向上移动(类似于Id

我有一个使用
数据的函数。可能.monad
如下:

typeCheck ν (f · e) =
  typeCheck ν e >>= λ { (u , e′) →
  typeCheck ν f >>= λ { (u′ ▷ t , f′) →
  u !≡ₜ u′      >>= λ { refl →
  pure (, (f′ · e′)) };
  _ → nothing }}
有没有办法消除
\→ 不使用任何大小写,或者至少将其进一步向上移动(类似于Idris)以获得类似于以下内容的内容:

typeCheck ν (f · e) =
  typeCheck ν e >>= λ { (u , e′) →
  typeCheck ν f >>= λ { _ → nothing; (u′ ▷ t , f′) →
  u ≡!ₜ u′      >>= λ { refl →
  pure (, (f′ · e′)) }}}
阿格达现在有。文档中的一个示例:

infer Γ (app e e₁) = do
  s ofType A => B ← infer Γ e
    where _ ofType nat → typeError "numbers cannot be applied to arguments"
  t ofType A₁     ← infer Γ e₁
  refl            ← A =?= A₁
  pure (app s t ofType B)