shared-fields alternatives and similar packages
Based on the "Control" category.
Alternatively, view shared-fields 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.
SaaSHub - Software Alternatives and Reviews
Do you think we are missing an alternative of shared-fields or a related project?
README
shared-fields
A simple single-module library for creating lens field typeclasses in a way that allows them to be shared between modules.
By default, lens' makeFields
creates a new class if it can't find a matching one in scope. This means that if you try to makeFields
records in different modules without importing one module into the other, you'll get conflicting class definitions rather than a single lens which functions with both records.
module A where
data A = A { _aThing :: Bool }
deriving (Show, Read, Eq)
makeFields ''A
module B where
data B = B { _bThing :: String }
deriving (Show, Read, Eq)
makeFields ''B
module Main where
import A
import B
import Control.Lens
main = print $ A False ^. thing -- fails because there are two HasThing classes
If you use shared-fields
, though:
module SharedFields where
generateField "Thing"
-- alternatively:
-- generateFields ["Thing"]
module A where
import SharedFields
data A = A { _aThing :: Bool }
deriving (Show, Read, Eq)
makeFields ''A
module B where
import SharedFields
data B = B { _bThing :: String }
deriving (Show, Read, Eq)
makeFields ''B
module Main where
import A
import B
import Control.Lens
main = print $ A False ^. thing -- works now because there's one consistent HasThing class!