these alternatives and similar packages
Based on the "Control" category.
Alternatively, view these alternatives based on common mentions on social networks and blogs.
rio-orphans9.9 2.1 these VS rio-orphansA standard library for Haskell
machines9.8 2.6 these VS machinesNetworks of composable stream transducers
fused-effects9.8 6.3 these VS fused-effectsA fast, flexible, fused effect system for Haskell
funflow9.8 0.0 these VS funflowFunctional workflows
pipes9.8 0.0 these VS pipesCompositional pipelines
transient9.8 0.0 these VS transientA full stack, reactive architecture for general purpose programming. Algebraic and monadically composable primitives for concurrency, parallelism, event handling, transactions, multithreading, Web, and distributed computing with complete de-inversion of control (No callbacks, no blocking, pure state)
mtl9.8 4.7 these VS mtlThe Monad Transformer Library
capability9.7 2.6 these VS capabilityExtensional capabilities and deriving combinators
recursion-schemes9.7 0.0 these VS recursion-schemesGeneralized bananas, lenses and barbed wire
apecs9.7 0.0 these VS apecsa fast, extensible, type driven Haskell ECS framework for games
freer-simple9.6 0.0 these VS freer-simpleA friendly effect system for Haskell
free9.6 3.7 these VS freefree monads
distributed-closure9.6 0.0 these VS distributed-closureSerializable closures for distributed programming.
foldl9.6 0.0 these VS foldlComposable, streaming, and efficient left folds
record9.6 0.0 these VS recordAnonymous records
classy-prelude9.5 0.0 these VS classy-preludeType classes for mapping, folding, and traversing monomorphic containers
auto9.5 0.0 these VS autoHaskell DSL and platform providing denotational, compositional api for discrete-step, locally stateful, interactive programs, games & automations. http://hackage.haskell.org/package/auto
safe-exceptions9.5 0.0 these VS safe-exceptionsSafe, consistent, and easy exception handling
classy-prelude-yesod9.5 0.0 these VS classy-prelude-yesodType classes for mapping, folding, and traversing monomorphic containers
extensible-effects9.5 0.0 these VS extensible-effectsExtensible Effects: An Alternative to Monad Transformers
unliftio9.5 0.0 these VS unliftioThe MonadUnliftIO typeclass for unlifting monads to IO
selective9.5 0.0 these VS selectiveSelective Applicative Functors: Declare Your Effects Statically, Select Which to Execute Dynamically
ComonadSheet9.4 0.0 these VS ComonadSheetA library for expressing "spreadsheet-like" computations with absolute and relative references, using fixed-points of n-dimensional comonads.
abstract-par9.4 0.0 these VS abstract-parType classes generalizing the functionality of the 'monad-par' library.
retry9.4 0.0 these VS retryRetry combinators for monadic actions that may fail
hask9.4 0.0 these VS haskCategory theory for Haskell with a lens flavor (you need GHC 7.8.3, not 7.8.2 to build this!)
frpnow9.3 0.0 these VS frpnowPrincipled practical FRP
parallel9.3 0.0 these VS parallela library for parallel programming
transient-universe9.3 0.0 these VS transient-universeA Cloud monad based on transient for the creation of Web and reactive distributed applications that are fully composable, where Web browsers are first class nodes in the cloud
cloud-haskell9.2 0.0 these VS cloud-haskellThis is an umbrella development repository for Cloud Haskell
either9.2 0.0 these VS eitherthe EitherT monad transformer
distributed-fork9.2 0.0 these VS distributed-forkA distributed data processing framework in Haskell.
deepseq9.1 2.1 these VS deepseqDeep evaluation of data structures
ifcxt9.1 0.0 these VS ifcxtconstraint level if statements
tardis9.1 0.0 these VS tardisBidirectional state monad transformer
contravariant9.1 0.0 these VS contravariantHaskell 98 contravariant functors
distributed-process-platformDEPRECATED (Cloud Haskell Platform) in favor of distributed-process-extras, distributed-process-async, distributed-process-client-server, distributed-process-registry, distributed-process-supervisor, distributed-process-task and distributed-process-execution
monad-control9.1 0.0 these VS monad-controlLift control operations, like exception catching, through monad transformers
monad-validate9.1 0.0 these VS monad-validate(NOTE: REPOSITORY MOVED TO NEW OWNER: https://github.com/lexi-lambda/monad-validate) A Haskell monad transformer library for data validation
freer-effects9.0 0.0 these VS freer-effectsAn implementation of "Freer Monads, More Extensible Effects".
ixmonad9.0 0.0 these VS ixmonadProvides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects.
errors9.0 0.0 these VS errorsType-safe error handling
effect-monad9.0 0.0 these VS effect-monadProvides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects.
operational9.0 0.0 these VS operationalImplement monads by specifying instructions and their desired operational semantics.
exceptions8.9 0.0 these VS exceptionsmtl friendly exceptions
monad-time8.9 0.0 these VS monad-timeType class for monads which carry the notion of the current time.
motor8.9 0.0 these VS motorType-safe effectful state machines in Haskell
mmorph8.9 0.0 these VS mmorphMonad morphisms
lens-tutorial8.9 0.0 these VS lens-tutorialThe missing tutorial module for the lens library
in-other-words8.9 2.1 these VS in-other-wordsA higher-order effect system where the sky's the limit
ONLYOFFICE Docs — document collaboration in your environment
Do you think we are missing an alternative of these or a related project?
These — an either-or-both data type
These a b represents having either a value of type
a, a value of type
b, or values of both
data These a b = This a | That b | These a b
This is equivalent to
Either (a, b) (Either a b). Or equivalent to
Either a (b, Maybe a). Or various other equally equivalent types. In terms of "sum" and "product" types,
These a b is
a + b + ab which can't be factored cleanly to get a type that mentions
b only once each.
The fact that there's no single obvious way to express it as a combination of existing types is one primary motivation for this package.
A variety of functions are provided in
Data.These akin to those in
Data.Either, except somewhat more numerous on account of having more cases to consider. Most should be self-explanatory if you're already familiar with the similarly-named functions in
there are traversals over elements of the same type, suitable for use with
Control.Lens. This has the dramatic benefit that if you're using
lens you can ignore the dreadfully bland
mapThat functions in favor of saying
over here and
Align — structural unions
There is a notion of "zippy"
liftA2 (,) behaves like
zip in the sense that if the
Functor is regarded as a container with distinct locations, each element of the result is a pair of the values that occupied the same location in the two inputs. For this to be possible, the result can only contain values at locations where both inputs also contained values. In a sense, this is the intersection of the "shapes" of the two inputs.
In the case of the
zip function itself, this means the length of the result is equal to the length of the shorter of the two inputs.
On many occasions it would be more useful to have a "zip with padding", where the length of the result is that of the longer input, with the other input extended by some means. The best way to do this is a recurring question, having been asked at least four times on Stack Overflow.
Probably the most obvious general-purpose solution is use
Maybe so that the result is of type
[(Maybe a, Maybe b)], but this forces any code using that result to consider the possibility of the list containing the value
(Nothing, Nothing), which we don't want.
The type class
Align is here because
f (These a b) is the natural result type of a generic "zip with padding" operation--i.e. a structural union rather than intersection.
I believe the name "Align" was borrowed from a blog post by Paul Chiusano, though he used
unalign is to
unzip is to
Unalign class itself does nothing, as
unalign can be defined for any
Functor; an instance just documents that
unalign behaves properly as an inverse to
Crosswalk is to
Traversable is to
Applicative. That's really all there is to say on the matter.
<cmccann> elliott, you should think of some more instances for Bicrosswalk one of these days <shachaf> cmccann: Does it have any instances? <elliott> cmccann: unfortunately it is too perfect an abstraction to be useful.
ChronicleT — a.k.a. These as a monad
These a has an obvious
Monad instance, provided here in monad transformer form.
The expected use case is for computations with a notion of fatal vs. non-fatal errors, like a hybrid writer/exception monad. While running successfully a computation carries a "record" of type
c, which accumulates using a
Monoid instance (as with the writer monad); if a computation fails completely, the result is its record up to the point where it ended.
A more specific example would be something like parsing ill-formed input with the goal of extracting as much as you can and throwing out anything you can't interpret.