4949flip (x:: Left{L, R} ) where {L, R} = Right {R, L} (x. value)
5050flip (x:: Right{L, R} ) where {L, R} = Left {R, L} (x. value)
5151
52- Base. get (e:: Either ) = either_get (e)
53- either_get (e:: Left ) = nothing
54- either_get (e:: Right ) = e. value
55-
56- getOption (e:: Either ) = either_getOption (e)
57- either_getOption (:: Left{L, R} ) where {L, R} = None {R} ()
58- either_getOption (e:: Right{L, R} ) where {L, R} = Some {R} (e. value)
59-
6052isleft (e:: Either ) = either_isleft (e)
6153either_isleft (e:: Left ) = true
6254either_isleft (e:: Right ) = false
@@ -81,11 +73,17 @@ getrightOption(e::Either) = either_getrightOption(e)
8173either_getrightOption (e:: Left{L, R} ) where {L, R} = None {R} ()
8274either_getrightOption (e:: Right{L, R} ) where {L, R} = Some {R} (e. value)
8375
84- Base. convert (:: Type{<:Option} , e:: Either ) = getrightOption (e)
76+ Base. get (e:: Either ) = getright (e)
77+ getOption (e:: Either ) = getrightOption (e)
8578
8679Base. eltype (:: Type{<:Either{L, R}} ) where {L, R} = R
8780Base. eltype (:: Type{<:Either} ) = Any
8881
82+ Base. iterate (e:: Either , state... ) = either_iterate (e, state... )
83+ either_iterate (e:: Right ) = e. value, nothing
84+ either_iterate (e:: Right , state) = state
85+ either_iterate (e:: Left ) = nothing
86+
8987Base. foreach (f, x:: Either ) = either_foreach (f, x)
9088either_foreach (f, x:: Right ) = f (x. value); nothing
9189either_foreach (f, x:: Left ) = nothing
@@ -99,19 +97,6 @@ function either_map(f, x::Left{L, R}) where {L, R}
9997end
10098
10199Iterators. flatten (e:: Either ) = either_flatten (e)
102- either_flatten (x:: Right{L, <:Either} ) where {L} = x. value
103- either_flatten (x:: Right{L, Any} ) where {L} = Base. Iterators. flatten (Right {L} (x. value))
100+ either_flatten (x:: Right ) = convert (Either, x. value)
104101either_flatten (x:: Left ) = x
105102either_flatten (x:: Left{L, E} ) where {L, R, E <: Either{L, R} } = Left {L, R} (x. value) # just to have better type support
106-
107-
108- # transform Option/Try to Either
109- getEither (v:: Option ) = option_getEither (v)
110- option_getEither (v:: Some ) = Right {Any} (v. value)
111- option_getEither (v:: None{T} ) where T = Left {Nothing, T} (nothing )
112-
113- getEither (v:: Try ) = try_getEither (v)
114- try_getEither (v:: Success ) = Right {Any} (v. value)
115- try_getEither (v:: Failure{T} ) where T = Left {Failure, T} (v)
116-
117- getEither (v:: Either ) = v
0 commit comments