on 045241e help sign in
generic-lens/examples/Examples.hs
42 lines 997 B history raw
1{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE DeriveGeneric #-}
3{-# LANGUAGE DuplicateRecordFields #-}
4{-# LANGUAGE FlexibleContexts #-}
5{-# LANGUAGE TypeApplications #-}
6{-# LANGUAGE UndecidableInstances #-}
8module Examples where
10import GHC.Generics
11import Data.Generics.Record
12import Data.Generics.Product
13import Control.Lens
15data Human = Human
16 { name :: String
17 , age :: Int
18 , address :: String
19 , eats :: String
20 } deriving (Show, Generic)
22human :: Human
23human = Human { name = "Tunyasz", age = 10, address = "London", eats = "Bread" }
25data Animal = Animal
26 { name :: String
27 , age :: Int
28 , eats :: String
29 } deriving (Show, Generic)
31growUp :: Animal -> Animal
32growUp (Animal name age _) = Animal name (age + 10) "raw meat"
34data WildAnimal = WildAnimal
35 { name :: String
36 , age :: Int
37 , eats :: String
38 , hunts :: Animal
39 } deriving (Show, Generic)
41raiseByWolves :: Human -> Human
42raiseByWolves human = human & super %~ growUp