Package maintainers and Hackage trustees are allowed to edit certain bits
of package metadata after a release, without uploading a new tarball.
Note that the tarball itself is never changed, just the metadata that is
stored separately. For more information about metadata revisions, please
refer to the
Hackage Metadata Revisions FAQ.
| No. |
Time |
User |
SHA256 |
| -r1 |
2026-10-11T14:00:21Z |
mastratisi |
8b752df4f283027cfed23030abba201f771f8090ec740d9ec5fd5551de27796b
|
|
Changed synopsis
from A railway oriented mini-DSL for unified error handling.
to Railway-oriented error handling: unwrap or throw in one short operator. Changed description
from A railway oriented mini-DSL for handling and interpreting error states
and cardinality checks across diverse failure types in a unified way.
to Railway-oriented error handling for Haskell: one short operator per
step, and the failure paths stop taking up lines.
Each operator peels one layer of a result (@Maybe@, @Either@, @Bool@,
@Validation@, or a collection of them) and says what to throw if it
failed. Where you would write
> rows <- runQuery (userById uid) >>= either (const (throwError err503)) pure
> user <- case rows of
> [] -> throwError err404
> [u] -> pure u
> _ -> throwError err500
you write
> user <- runQuery (userById uid) ? err503 ?! cardinalityErr err404 (const err500)
Layers are peeled left to right: @? err503@ unwraps the database
@Either@, then @?!@ demands exactly one row (none is a 404, several a 500).
* Works in any @MonadError@ ("Railroad.MonadError": @mtl@, @ExceptT@,
servant's @Handler@) and in @effectful@ with the @Error@ effect
("Railroad").
* Unwrap or throw: @?@ (constant error) and @??@ (error computed from
the failure). Recover instead of throwing: @?~@ and @??~@.
* Tag by a predicate with @?>@, or fall back to another source with @?|@
and @?|<>@.
* @Validation@ failures accumulate: validate a whole request and report
every problem at once.
* All operators are @infixl 1@ like @>>=@ and @\<&\>@, so they chain without
parentheses.
Collections are checked with quantifiers: @?@ is ∀ ("every element
succeeds", so an empty collection passes), @?+@ is ∃ ("at least one"),
@?!@ is ∃! ("exactly one") and @?∅@ is ¬∃ ("none"). They chain:
@xs ?+ e1 ? e2@ means "at least one, and all succeed". The readme has the
details and a longer servant example.
|
| -r0 |
2026-10-11T12:38:02Z |
mastratisi |
706460e7531fd9c38da21fc0597463a18555f3161ecea6646b85f3be69a513d7
|
|
|