module Data.Accessor.Example where
import Data.Accessor.Basic ((.>), ($%), (^.), (^:), (^=), )
import Data.Accessor.Tuple (first, second, first3, second3, )
import qualified Data.Accessor.Container as Container
import qualified Data.Accessor.BinaryRead as Read
import qualified Data.Accessor.Show as Show
import qualified Data.Accessor.Basic as Accessor
import qualified Data.Array as Array
import qualified Data.Set as Set
import qualified Data.Map as Map
import Data.Char (ord, toUpper, )
import Prelude hiding (init)
plain :: Int
plain :: Int
plain =
forall r a. T r a -> r -> a
Accessor.get forall a b. T (a, b) b
second forall a b. (a -> b) -> a -> b
$
forall r a. T r a -> (a -> a) -> r -> r
Accessor.modify forall a b. T (a, b) b
second forall a. Enum a => a -> a
succ forall a b. (a -> b) -> a -> b
$
forall r a. T r a -> a -> r -> r
Accessor.set forall a b. T (a, b) a
first Char
'a' forall a b. (a -> b) -> a -> b
$
(Char
'b',Int
7)
init :: (Char,Int)
init :: (Char, Int)
init =
forall r. [r -> r] -> r -> r
Accessor.compose
[forall r a. T r a -> a -> r -> r
Accessor.set forall a b. T (a, b) a
first Char
'b',
forall r a. T r a -> (a -> a) -> r -> r
Accessor.modify forall a b. T (a, b) a
first forall a. Enum a => a -> a
succ,
forall r a. T r a -> a -> r -> r
Accessor.set forall a b. T (a, b) b
second Int
7]
(forall a. HasCallStack => a
undefined,forall a. HasCallStack => a
undefined)
initInfix :: (Char,Int)
initInfix :: (Char, Int)
initInfix =
(forall a. HasCallStack => a
undefined,forall a. HasCallStack => a
undefined)
forall a b. a -> (a -> b) -> b
$% forall a b. T (a, b) a
first forall r a. T r a -> a -> r -> r
^= Char
'b'
forall a b. a -> (a -> b) -> b
$% forall a b. T (a, b) a
first forall r a. T r a -> (a -> a) -> r -> r
^: forall a. Enum a => a -> a
succ
forall a b. a -> (a -> b) -> b
$% forall a b. T (a, b) b
second forall r a. T r a -> a -> r -> r
^= Int
7
read :: Maybe ((Char,Int), Read.Stream)
read :: Maybe ((Char, Int), Stream)
read =
forall s r. Parser s r -> (r, s) -> Maybe (r, s)
Read.runParser
(forall s r. [Parser s r] -> Parser s r
Read.record [forall s a r. (ByteStream s, C a) => T r a -> Parser s r
Read.field forall a b. T (a, b) a
first, forall s a r. (ByteStream s, C a) => T r a -> Parser s r
Read.field forall a b. T (a, b) b
second])
((forall a. HasCallStack => a
undefined,forall a. HasCallStack => a
undefined),
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Char -> Int
ord Char
'c') forall a. a -> [a] -> [a]
: Word8
59 forall a. a -> [a] -> [a]
: Word8
154 forall a. a -> [a] -> [a]
: Word8
202 forall a. a -> [a] -> [a]
: Word8
0 forall a. a -> [a] -> [a]
: [])
infix0 :: Int
infix0 :: Int
infix0 =
((Char
'b',Int
7),String
"hallo")forall r a. r -> T r a -> a
^.forall a b. T (a, b) a
firstforall r a. r -> T r a -> a
^.forall a b. T (a, b) b
second
infix1 :: ((Char, Int), String)
infix1 :: ((Char, Int), String)
infix1 =
((Char
'b',Int
7),String
"hallo")forall a b. a -> (a -> b) -> b
$%forall a b. T (a, b) a
firstforall r a. T r a -> (a -> a) -> r -> r
^:forall a b. T (a, b) b
secondforall r a. T r a -> (a -> a) -> r -> r
^:(Int
1forall a. Num a => a -> a -> a
+)
infix2 :: ((Char, Int), String)
infix2 :: ((Char, Int), String)
infix2 =
((Char
'b',Int
7),String
"hallo")forall a b. a -> (a -> b) -> b
$%forall a b. T (a, b) a
firstforall r a. T r a -> (a -> a) -> r -> r
^:forall a b. T (a, b) b
secondforall r a. T r a -> a -> r -> r
^=Int
10
infix3 :: Int
infix3 :: Int
infix3 =
((Char
'b',Int
7),String
"hallo")forall r a. r -> T r a -> a
^.(forall a b. T (a, b) a
firstforall a b c. T a b -> T b c -> T a c
.>forall a b. T (a, b) b
second)
infix4 :: ((Char, Int), String)
infix4 :: ((Char, Int), String)
infix4 =
((Char
'b',Int
7),String
"hallo")forall a b. a -> (a -> b) -> b
$%(forall a b. T (a, b) a
firstforall a b c. T a b -> T b c -> T a c
.>forall a b. T (a, b) b
second)forall r a. T r a -> (a -> a) -> r -> r
^:(Int
1forall a. Num a => a -> a -> a
+)
showsPair :: Int -> (Char, Int) -> ShowS
showsPair :: Int -> (Char, Int) -> ShowS
showsPair =
forall r.
[r -> r -> Maybe ShowS] -> String -> r -> Int -> r -> ShowS
Show.showsPrec
[forall a r.
(Show a, Eq a) =>
String -> T r a -> r -> r -> Maybe ShowS
Show.field String
"first" forall a b. T (a, b) a
first,
forall a r.
(Show a, Eq a) =>
String -> T r a -> r -> r -> Maybe ShowS
Show.field String
"second" forall a b. T (a, b) b
second]
String
"init" (Char, Int)
init
show0 :: String
show0 :: String
show0 = Int -> (Char, Int) -> ShowS
showsPair Int
11 (Char, Int)
init String
""
show1 :: String
show1 :: String
show1 = Int -> (Char, Int) -> ShowS
showsPair Int
5 (Char
'd',Int
8) String
""
self :: Char
self :: Char
self = forall r. T r r
Accessor.self forall r a. T r a -> (a -> a) -> r -> r
^: forall a. Enum a => a -> a
succ forall a b. (a -> b) -> a -> b
$ Char
'a'
null :: Char
null :: Char
null = forall r. T r ()
Accessor.null forall r a. T r a -> a -> r -> r
^= () forall a b. (a -> b) -> a -> b
$ Char
'a'
result :: [Int]
result :: [Int]
result =
let f :: Char -> Int
f = (forall a b. Eq a => a -> T (a -> b) b
Accessor.result Char
'a' forall r a. T r a -> a -> r -> r
^= Int
65) Char -> Int
ord
in forall a b. (a -> b) -> [a] -> [b]
map Char -> Int
f String
"abcABC"
result2 :: [Int]
result2 :: [Int]
result2 =
let f :: Int -> Int -> Int
f = (forall a b. Eq a => a -> T (a -> b) b
Accessor.result Int
0 forall r a. T r a -> (a -> a) -> r -> r
^: forall a b. Eq a => a -> T (a -> b) b
Accessor.result Int
0 forall r a. T r a -> a -> r -> r
^= Int
1) forall a. Integral a => a -> a -> a
div
in forall a b. (a -> b) -> [a] -> [b]
map (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Int -> Int -> Int
f) [(Int
4,Int
2), (Int
2,Int
1), (Int
0,Int
0)]
merge :: (Int, Char, Ordering)
merge :: (Int, Char, Ordering)
merge =
forall a b c. T a b -> T a c -> T a (b, c)
Accessor.merge forall a b c. T (a, b, c) a
first3 forall a b c. T (a, b, c) b
second3 forall r a. T r a -> a -> r -> r
^= (Int
42, Char
'c') forall a b. (a -> b) -> a -> b
$
(Int
23, Char
'a', Ordering
GT)
accessHourMinute :: Accessor.T (Int, Int, Int) Int
accessHourMinute :: T (Int, Int, Int) Int
accessHourMinute =
forall a b c. T a b -> T a c -> T a (b, c)
Accessor.merge forall a b c. T (a, b, c) a
first3 forall a b c. T (a, b, c) b
second3 forall a b c. T a b -> T b c -> T a c
.>
forall b a. (b -> a) -> (a -> b) -> T a b
Accessor.fromWrapper (\Int
h -> forall a. Integral a => a -> a -> (a, a)
divMod Int
h Int
60) (\(Int
h,Int
m) -> Int
hforall a. Num a => a -> a -> a
*Int
60forall a. Num a => a -> a -> a
+Int
m)
mergeHourMinute :: (Int, Int, Int)
mergeHourMinute :: (Int, Int, Int)
mergeHourMinute =
T (Int, Int, Int) Int
accessHourMinute forall r a. T r a -> (a -> a) -> r -> r
^: (Int
15forall a. Num a => a -> a -> a
+) forall a b. (a -> b) -> a -> b
$
(Int
12, Int
58, Int
13)
array :: Array.Array Int Char
array :: Array Int Char
array =
forall i e. Ix i => i -> T (Array i e) e
Container.array Int
7 forall r a. T r a -> (a -> a) -> r -> r
^: Char -> Char
toUpper forall a b. (a -> b) -> a -> b
$
forall i e. Ix i => i -> T (Array i e) e
Container.array Int
2 forall r a. T r a -> a -> r -> r
^= Char
'z' forall a b. (a -> b) -> a -> b
$
forall i e. Ix i => (i, i) -> [e] -> Array i e
Array.listArray (Int
0,Int
9) [Char
'a'..]
set :: Set.Set Char
set :: Set Char
set =
forall a. Ord a => a -> T (Set a) Bool
Container.set Char
'a' forall r a. T r a -> a -> r -> r
^= Bool
False forall a b. (a -> b) -> a -> b
$
forall a. Ord a => a -> T (Set a) Bool
Container.set Char
'd' forall r a. T r a -> (a -> a) -> r -> r
^: Bool -> Bool
not forall a b. (a -> b) -> a -> b
$
forall a. Ord a => a -> T (Set a) Bool
Container.set Char
'b' forall r a. T r a -> a -> r -> r
^= Bool
True forall a b. (a -> b) -> a -> b
$
forall a. Ord a => [a] -> Set a
Set.fromList [Char
'a',Char
'c']
mapDefault :: Map.Map Int Char
mapDefault :: Map Int Char
mapDefault =
forall key elem. Ord key => elem -> key -> T (Map key elem) elem
Container.mapDefault Char
' ' Int
1 forall r a. T r a -> a -> r -> r
^= Char
'-' forall a b. (a -> b) -> a -> b
$
forall key elem. Ord key => elem -> key -> T (Map key elem) elem
Container.mapDefault Char
' ' Int
3 forall r a. T r a -> a -> r -> r
^= Char
'z' forall a b. (a -> b) -> a -> b
$
forall key elem. Ord key => elem -> key -> T (Map key elem) elem
Container.mapDefault Char
' ' Int
5 forall r a. T r a -> (a -> a) -> r -> r
^: Char -> Char
toUpper forall a b. (a -> b) -> a -> b
$
forall key elem. Ord key => elem -> key -> T (Map key elem) elem
Container.mapDefault Char
' ' Int
9 forall r a. T r a -> (a -> a) -> r -> r
^: Char -> Char
toUpper forall a b. (a -> b) -> a -> b
$
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList forall a b. (a -> b) -> a -> b
$ forall a b. [a] -> [b] -> [(a, b)]
zip (forall a b. (a -> b) -> [a] -> [b]
map (forall a b. (Num a, Integral b) => a -> b -> a
^(Int
2::Int)) [Int
0..Int
7]) [Char
'a'..]
mapMaybe :: Map.Map Int Char
mapMaybe :: Map Int Char
mapMaybe =
forall key elem. Ord key => key -> T (Map key elem) (Maybe elem)
Container.mapMaybe Int
1 forall r a. T r a -> a -> r -> r
^= forall a. a -> Maybe a
Just Char
'-' forall a b. (a -> b) -> a -> b
$
forall key elem. Ord key => key -> T (Map key elem) (Maybe elem)
Container.mapMaybe Int
2 forall r a. T r a -> a -> r -> r
^= forall a. Maybe a
Nothing forall a b. (a -> b) -> a -> b
$
forall key elem. Ord key => key -> T (Map key elem) (Maybe elem)
Container.mapMaybe Int
3 forall r a. T r a -> a -> r -> r
^= forall a. a -> Maybe a
Just Char
'z' forall a b. (a -> b) -> a -> b
$
forall key elem. Ord key => key -> T (Map key elem) (Maybe elem)
Container.mapMaybe Int
4 forall r a. T r a -> a -> r -> r
^= forall a. Maybe a
Nothing forall a b. (a -> b) -> a -> b
$
forall key elem. Ord key => key -> T (Map key elem) (Maybe elem)
Container.mapMaybe Int
5 forall r a. T r a -> (a -> a) -> r -> r
^: forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Char
toUpper forall a b. (a -> b) -> a -> b
$
forall key elem. Ord key => key -> T (Map key elem) (Maybe elem)
Container.mapMaybe Int
9 forall r a. T r a -> (a -> a) -> r -> r
^: forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Char
toUpper forall a b. (a -> b) -> a -> b
$
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList forall a b. (a -> b) -> a -> b
$ forall a b. [a] -> [b] -> [(a, b)]
zip (forall a b. (a -> b) -> [a] -> [b]
map (forall a b. (Num a, Integral b) => a -> b -> a
^(Int
2::Int)) [Int
0..Int
7]) [Char
'a'..]