t(a, b) :: (any() -> FE.Result.t(a, b))
maybe(t(a, b)) :: t(FE.Maybe.t(a), FE.Maybe.t(b))
one_of([a], b) :: t(a, b) when a: var, b: var
predicate((a -> boolean()), b | (a -> b)) :: t(a, b) when a: var, b: var