lens-typelevel-0.1.0.1: src/Data/Type/Lens/Example.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
-- |
-- Module : Data.Type.Lens.Example
-- Copyright : (c) Justin Le 2018
-- License : BSD3
--
-- Maintainer : justin@jle.im
-- Stability : experimental
-- Portability : non-portable
--
-- See source for examples of using type-level lenses from
-- "Data.Type.Lens".
module Data.Type.Lens.Example (
-- * Prefix functions
SetExample
, ViewExample
, ToExample
, OverExample
, TraversalExample
, NestedExample
, FoldExample
, UnsafeExample
, IxExample
, CloneExample
-- * Operators
, SetExample'
, ViewExample'
, ToExample'
, OverExample'
, TraversalExample'
, NestedExample'
, FoldExample'
, IxExample'
, UnsafeExample'
, CloneExample'
) where
import Data.Singletons.Prelude
import Data.Singletons.Prelude.Function
import Data.Type.Lens
-- |
-- >>> :kind! SetExample
-- '( 'True, 6 )
type SetExample = Set L1_ 'True '("hello", 6 )
-- |
-- >>> :kind! ViewExample
-- 6
type ViewExample = View L2_ '("hello", 6 )
-- |
-- >>> :kind! ToExample
-- 6
type ToExample = View (To_ SndSym0) '("hello", 6 )
-- |
-- >>> :kind! TraversalExample
-- '( "hello", 'False )
type OverExample = Over L2_ NotSym0 '("hello", 'True )
-- |
-- >>> :kind! TraversalExample
-- '[ 'False, 'True, 'True ]
type TraversalExample = Over Traverse_ NotSym0 '[ 'True, 'False, 'False ]
-- |
-- >>> :kind! NestedExample
-- 6
type NestedExample = View (L2_ .@ L1_) '("hello", '(6, 'False ) )
-- |
-- >>> :kind! FoldExample
-- '["hello", "world", "curry"]
type FoldExample = ToListOf (Traverse_ .@ L1_)
'[ '("hello", 'True )
, '("world", 'False)
, '("curry", 'False)
]
-- |
-- >>> :kind! UnsafeExample
-- Error "Failed indexing into empty traversal"
type UnsafeExample = UnsafePreview Traverse_ '[]
-- |
-- >>> :kind! IxExample
-- '["hello", "haskell", "curry"]
type IxExample = Set (IxList_ ('S 'Z)) "haskell"
'["hello", "world", "curry"]
-- |
-- >>> :kind! CloneExample L1_
-- 'False
-- >>> :kind! CloneExample L2_
-- 'True
type CloneExample l = View (CloneLens_ l) (Over (CloneLens_ l) NotSym0 '( 'True, 'False ))
type SetExample' = '("hello", 6 ) & L1_ .~ 'True
type ViewExample' = '("hello", 6 ) ^. L2_
type ToExample' = '("hello", 6 ) ^. To_ SndSym0
type OverExample' = '("hello", 'True ) & L2_ %~ NotSym0
type TraversalExample' = '[ 'True, 'False, 'False ] & Traverse_ %~ NotSym0
type NestedExample' = '("hello", '(6, 'False ) ) ^. L2_ .@ L1_
type FoldExample' = '[ '("hello", 'True )
, '("world", 'False)
, '("curry", 'False)
] ^.. Traverse_ .@ L1_
type UnsafeExample' = '[] ^?! Traverse_
type IxExample' = '["hello","world","curry"] & IxList_ ('S 'Z) .~ "haskell"
type CloneExample' l = ('( 'True, 'False ) & CloneLens_ l %~ NotSym0) ^. CloneLens_ l