let rec expr_fun_args =
              function
              | (Ast.ExFun (_, (Ast.McArr (_, p, (Ast.ExNil _), e))) as ge)
                  ->
                  if is_irrefut_patt p
                  then
                    (let (pl, e) = expr_fun_args e in (((`patt p) :: pl), e))
                  else ([], ge)
              | Ast.ExFUN (_, i, e) ->
                  let (pl, e) = expr_fun_args e in (((`newtype i) :: pl), e)
              | ge -> ([], ge)