Last active
September 16, 2019 21:53
-
-
Save morteako/aa24138ed382c43113bee8ae906bbafd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE QuasiQuotes #-} | |
{-# LANGUAGE OverloadedStrings #-} | |
import Data.Aeson.QQ | |
import Data.Aeson | |
import Data.Aeson.Lens | |
import Control.Lens | |
obj = [aesonQQ| | |
{ | |
"a": {"x":1}, | |
"b": {"x":2} | |
} | |
|] | |
--Litt forenklet så lager man den lensen her som går ned i objektene (zoomer): | |
-- members : går ned i verdiene ( [a,b]) | |
-- _Object : går ned i objektene (ned i {x:1|2}, trengs bare pga haskell datatype) | |
-- at "y" : går ned i objektet med key y | |
--når man skal sette noe på en <at>, så er det sånn at hvis man gir Nothing, så slettes det som var der. | |
--hvis man gir Just val, så settes val inn. Vi skal jo sette inn, så vi gir Just (Number 1), der Number bare er | |
--en datakonstruktør for at typen skal passe | |
main = do | |
print obj | |
print $ encode obj | |
let insertVal = Just (Number 1) | |
let newObj = set (members . _Object . at "y") insertVal obj | |
print newObj | |
print $ encode newObj | |
--Går tilbake til orginalt objekt ved å slette verdeien på y, ved Nothing | |
let orgObj = set (members . _Object . at "y") Nothing newObj | |
print orgObj | |
print $ encode orgObj | |
--obj | |
-- Object (fromList [("a",Object (fromList [("x",Number 1.0)])),("b",Object (fromList [("x",Number 2.0)]))]) | |
-- "{\"a\":{\"x\":1},\"b\":{\"x\":2}}" | |
--newObj | |
-- Object (fromList [("a",Object (fromList [("x",Number 1.0),("y",Number 1.0)])),("b",Object (fromList [("x",Number 2.0),("y",Number 1.0)]))]) | |
-- "{\"a\":{\"x\":1,\"y\":1},\"b\":{\"x\":2,\"y\":1}}" | |
--orgObj | |
-- Object (fromList [("a",Object (fromList [("x",Number 1.0)])),("b",Object (fromList [("x",Number 2.0)]))]) | |
-- "{\"a\":{\"x\":1},\"b\":{\"x\":2}}" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment