objective alternatives and similar packages
Based on the "Control" category.
Alternatively, view objective alternatives based on common mentions on social networks and blogs.
-
transient
A 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) -
selective
Selective Applicative Functors: Declare Your Effects Statically, Select Which to Execute Dynamically -
auto
Haskell DSL and platform providing denotational, compositional api for discrete-step, locally stateful, interactive programs, games & automations. http://hackage.haskell.org/package/auto -
ComonadSheet
A library for expressing "spreadsheet-like" computations with absolute and relative references, using fixed-points of n-dimensional comonads. -
transient-universe
A 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 -
monad-validate
DISCONTINUED. (NOTE: REPOSITORY MOVED TO NEW OWNER: https://github.com/lexi-lambda/monad-validate) A Haskell monad transformer library for data validation -
distributed-process-platform
DEPRECATED (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 -
effect-monad
Provides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects. -
ixmonad
Provides 'graded monads' and 'parameterised monads' to Haskell, enabling fine-grained reasoning about effects.
CodeRabbit: AI Code Reviews for Developers
Do you think we are missing an alternative of objective or a related project?
README
objective
Paper: https://fumieval.github.io/papers/en/2015-Haskell-objects.html
This package provides composable objects and instances.
Introduction
The primal construct, Object
, models object-oriented objects. Object f g
represents an object.
newtype Object f g = Object { runObject :: forall x. f x -> g (x, Object f g) }
An object interprets a message f a
and returns the result a
and the next object Object f g
, on g
.
data Counter a where
Increment :: Counter ()
Print :: Counter Int
counter :: Int -> Object Counter IO
counter n = Object $ \case
Increment -> return ((), counter (n + 1))
Print -> print n >> return (n, counter n)
new :: Object f g -> IO (Instance f g)
creates an instance of an object.
(.-) :: (MonadIO m, MonadMask m) => Instance f m -> f a -> m a
sends a message to an instance. This can be used to handle instances in the typical OOP fashion.
> i <- new (counter 0)
> i .- Increment
> i .- Print
1
> i .- Increment
> i .- Print
2
Interestingly, Object (Skeleton t) m
and Object t m
are isomorphic (Skeleton
is an operational monad). cascading
lets objects to handle an operational monad.