Skip to content

Instantly share code, notes, and snippets.

@Ebmtranceboy
Created August 4, 2020 14:15
Show Gist options
  • Save Ebmtranceboy/ea56e41ea97c3463e4b9cad3f9e8325b to your computer and use it in GitHub Desktop.
Save Ebmtranceboy/ea56e41ea97c3463e4b9cad3f9e8325b to your computer and use it in GitHub Desktop.
Array + List lenses
module Main where
import Prelude
import Concur.Core (Widget)
import Concur.React (HTML)
import Concur.React.DOM (text, div', br') as D
import Concur.React.Run (runWidgetInDom)
import Effect (Effect)
import Data.Lens (Traversal, over, set, traversed, toListOf, view, element, _1)
import Data.Lens.Index (ix)
import Data.Lens.Fold (firstOf, lastOf, preview)
import Data.Maybe (Maybe(..))
import Data.Either (Either(..))
import Data.Tuple.Nested ((/\), type (/\))
_trav_1 :: forall a b. Traversal (Array (a/\b)) (Array (a/\b)) a a
_trav_1 = traversed <<< _1
exerciseWidget :: forall a. Widget HTML a
exerciseWidget =
D.div' $ (pure <<< (_ <> D.br')) =<<
[ D.text $ show $ over traversed negate [1, 3, 5]
, D.text $ show $ map negate [1, 3, 5]
, D.text $ show $ set traversed 6 [1, 3, 5]
, D.text $ show $ over traversed negate $ Just 7
, D.text $ show $ (over traversed negate $ Left 7 :: Either Int Int)
, D.text $ show $ (over traversed negate $ Right 7 :: Either Int Int)
, D.text $ show $ toListOf traversed [1, 3, 5]
, D.text $ show $ view traversed ["h", "e", "y"]
, D.text $ show $ firstOf traversed [1, 3, 5]
, D.text $ show $ preview traversed [1, 3, 5]
, D.text $ show $ lastOf traversed [1, 3, 5]
, D.text $ show $ over (traversed <<< traversed) negate [[1],[2,3]]
, D.text $ show $ view (traversed <<< traversed) [["1"],["2","3"]]
, D.text $ show $ over _trav_1 negate [1/\2, 3/\4]
, D.text $ show $ over (element 1 traversed) (_ * 10) [1, 3, 5]
, D.text $ show $ over (ix 1) (_ * 10) [1, 3, 5]
, D.text $ show $ set (ix 1) 10 [1, 3, 5]
, D.text $ show $ set (ix 3) 10 [1, 3, 5]
, D.text $ show $ set (ix 1) 10 $ toListOf traversed [1, 3, 5]
]
main :: Effect Unit
main = do
runWidgetInDom "main" exerciseWidget
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment