Skip to content

Instantly share code, notes, and snippets.

@andrevdm
Created March 7, 2018 06:19
Show Gist options
  • Save andrevdm/1739c92bdbbccbf080e6fe366f9e9839 to your computer and use it in GitHub Desktop.
Save andrevdm/1739c92bdbbccbf080e6fe366f9e9839 to your computer and use it in GitHub Desktop.
#!/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