Created
March 7, 2018 06:19
-
-
Save andrevdm/1739c92bdbbccbf080e6fe366f9e9839 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
#!/usr/bin/env stack | |
{- stack | |
script | |
--resolver lts-10.4 | |
--package text | |
--package protolude | |
--package text | |
--package lens | |
-} | |
{-# LANGUAGE NoImplicitPrelude #-} | |
{-# LANGUAGE OverloadedStrings #-} | |
{-# LANGUAGE TemplateHaskell #-} | |
module Main where | |
import Protolude | |
import qualified Data.Text as Txt | |
import Control.Lens | |
import Control.Lens.TH | |
data Parent = Parent { _pName :: Text | |
, _pChild :: Child | |
} deriving (Show) | |
data Child = Child { _cName :: Text | |
} deriving (Show) | |
makeLenses ''Parent | |
makeLenses ''Child | |
main :: IO () | |
main = do | |
let parent = Parent { _pName = "parent1" | |
, _pChild = Child { _cName = "child1" } | |
} | |
putText "-------------------------------------" | |
putText "^." | |
putText $ parent ^. pName | |
putText $ parent ^. pChild ^. cName | |
putText "-------------------------------------" | |
putText "" | |
putText "-------------------------------------" | |
putText "^. equiv" | |
putText $ _pName parent | |
putText $ _cName . _pChild $ parent | |
putText "-------------------------------------" | |
putText "" | |
putText "-------------------------------------" | |
putText ".~" | |
print $ parent & pName .~ "newName" | |
print $ parent & (pChild . cName) .~ "new childName" | |
putText "-------------------------------------" | |
putText "" | |
putText "-------------------------------------" | |
putText ".~ equiv" | |
print $ parent { _pName = "newName" } | |
print $ parent { _pChild = (_pChild parent) { _cName = "new childName" } } | |
putText "-------------------------------------" | |
putText "" | |
putText "-------------------------------------" | |
putText "%~" | |
print $ parent & pName %~ Txt.toUpper | |
print $ parent & (pChild . cName) %~ Txt.toUpper | |
putText "-------------------------------------" | |
putText "" | |
putText "-------------------------------------" | |
putText "%~ equiv" | |
print $ parent { _pName = Txt.toUpper . _pName $ parent } | |
print $ parent { _pChild = (_pChild parent) { _cName = Txt.toUpper . _cName . _pChild $ parent } } | |
putText "-------------------------------------" | |
putText "" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment