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)