All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- got rid of Compat dependency
- reverting
Base.catch_backtrace()toBase.catch_stack()everywhere. Apparently this is really only an issue on julia nightly and should not be changed in julia 1.6. Hence reverting everything.
- using
Base.catch_backtrace()now instead ofBase.catch_stack()which got deprecated
Base.getandBase.getindexare now both implemented forConst(like they are implemented already forIdentity), to simplify working withConst.- Vector conversions (
convert) are now more generic and support AbstractArray in general
Option(3)works now- The constructors
Const{ElementType}(value)andIdentity{ElementType}(value)had been removed already, however were still used. Maybe this now gave errors because of newer julia version, don't know, but now everything usesConst(value)andIdentity(value)instead. - fixed a couple of disambiguation errors which magically appeared after switching to Julia 1.6
- Thrown now parameterises also the type of the stacktrace. This is going to change in upcoming julia version 1.7.
Option{T}(value::T)didn't work and is removed now, as it does not provide any benefit anylonger, which is a breaking changeOption{T}()is also removed for completeness, which is a breaking changeConstno longer converts toIdentity. This was added originally so that aConstnested within anIdentitycan be flattened. However, there is a better alternative, namely now theflatmapoperator onIdentityjust strips away the outer Identity, without any call toconvert. This is simpler and more convenient approach which also makes the hacky conversion no longer needed. This is a breaking change.
- CI via GitHubActions
- Documentation via Documenter.jl and GitHubActions
- Codecoverage via GitHubActions and Codecov
- extensive Testing
- TagBot and CompatHelper GitHubActions
- extensive
promote_ruleandpromote_typejoinimplementations have been added for Identity, Const, Option, Either, OptionEither. @eithermacro with which you can constructEitherusing ? operator or if-else.
- Option is now represented as Union of Identity and Const{Nothing}
- Either is now represented as
Unionof Identity and Const - Try is now represented as
Unionof Identity and Const{<:Exception} - flatten in general is now unified to use
convertfor interoperability between similar container types - flatten of ContextManager is again reverted back to not use
FlattenMeanymore. Instead the inner result value is explicitly converted toContextManager, following the general principle now.
- foreach for Identity is fixed
- convert for Identity and Const preserves the container type now
- equality == for Thrown works now
- promote_type for Either (was too imprecise)
- flatten on ContextManager is now realised at runtime (the reason was that inaccurate typeinference could not be resolved for ContextManager before). Concretely, if you call
Iterators.flatten(...)on the ContextManager, a tagFlattenMewill be mapped onto the ContextManager. When the ContextManager is run, then a FlattenMe result will be further flattened out. Note that this wrapper is also applied to non-contextmanager types for advanced later flattening of complex nested flatten structures.
- typeinference for Option, Try, Either is now massively improved
initial release