microlens-aeson alternatives and similar packages
Based on the "Numeric" category.
Alternatively, view microlens-aeson alternatives based on common mentions on social networks and blogs.
-
numeric-ranges
DSL written in Haskell that provides a set of tools for working with both open and closed numeric intervals. -
simple-units
Haskell library for performing arithmetic with SI units with type-checked dimensional analysis -
approx
The library is created to allow for a easy-to-use reasonable way of emulating approx in Haskell. -
gutenberg-fibonaccis
DISCONTINUED. The first 1001 Fibonacci numbers, retrieved from the Gutenberg Project.
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of microlens-aeson or a related project?
README
microlens-aeson
microlens-aeson
provides Traversals for the
Aeson library's Value
type,
while obeying the Traversal
laws.
microlens-aeson
is derived from lens-aeson
, but is based upon microlens
to reduce the amount of dependencies involved.
Here is the dependency graph for lens-aeson
:
[lens-aeson dependencies](lens-aeson.png)
And that for microlens-aeson
:
[microlens-aeson dependencies](microlens-aeson.png)
Usage
microlens-aeson
provides Traversals into both lazy and strict variants
of all the text types. Here are some examples:
{-# LANGUAGE OverloadedStrings #-}
import Data.Aeson
import Data.Text (Text)
import Lens.Micro.Aeson
--------------------------
-- Manipulating primatives
--------------------------
-- | Optionally getting one value
a :: Maybe Int
a = ("37" :: Text) ^? _Integer -- Just 37
-- | Setting one value within encoded JSON
b :: Maybe Text
b = "true" & _Bool .~ False -- "false"
----------------------
-- Manipulating arrays
----------------------
-- | Get all values as an Aeson type.
c :: [Value]
c = "[1, 2, 3]" ^.. values -- [Number 1.0, Number 2.0, Number 3.0]
-- | Get all values cast to some simpler number type.
d :: [Double]
d = "[1, 2, 3]" ^.. values . _Double -- [1.0, 2.0, 3.0]
-- | Access a specific index, and set a `Value` directly.
e :: Text
e = "[1,2,3]" & nth 1 .~ Number 20 -- "[1,20,3]"
-----------------------
-- Manipulating objects
-----------------------
-- | Access all values of the key/value pairs.
f :: Text
f = "{\"a\":4,\"b\":7}" & members . _Number %~ (*10) -- "{\"a\":40,\"b\":70}"
-- | Access via a given key.
g :: Maybe Value
g = ("{\"a\": 100, \"b\": 200}" :: Text) ^? key "a" -- Just (Number 100.0)
-----------------------------------
-- Aeson `Value`s from encoded JSON
-----------------------------------
h :: Maybe Text
h = "{\"a\":4,\"b\":7}" ^? _Value
-- Just (Object (fromList [("a",Number 4.0),("b",Number 7.0)]))
See the Haddock documentation for a full API specification.
Migration from Data.Aeson.Lens
The functions provided here are Traversals, not Prisms, therefore creation of encoded JSON from Haskell types like:
>>> _Bool # True :: String
"true"
is no longer possible. Otherwise, if your use cases are strictly like
those listed in the Usage section above, then you need only to switch
the import from Data.Aeson.Lens
to Lens.Micro.Aeson
.