on bc2c3be help sign in
generic-lens/examples/Examples.hs
44 lines 1.2 kB history raw
1{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE DeriveGeneric #-}
3{-# LANGUAGE DuplicateRecordFields #-}
4{-# LANGUAGE FlexibleContexts #-}
5{-# LANGUAGE TypeApplications #-}
6{-# LANGUAGE UndecidableInstances #-}
8{-# OPTIONS_GHC -fno-warn-unused-imports #-}
10module Examples where
12import GHC.Generics
13import Data.Generics.Record
14import Data.Generics.Product
15--import Control.Lens
17data Animal = Animal
18 { name :: String
19 , age :: Int
20 , eats :: String
21 } deriving (Show, Generic)
23data Human = Human
24 { name :: String
25 , age :: Int
26 , address :: String
27 , eats :: String
28 } deriving (Show, Generic)
30data Living
31 = Animal' { name :: String, eats :: String, age :: Int }
32 | Human' { name :: String, age :: Int, address :: String, eats :: String }
33 deriving (Show, Generic)
35toby :: Human
36toby = Human { name = "Toby", age = 10, address = "London", eats = "Bread" }
38growUp :: Animal -> Animal
39growUp (Animal n a _) = Animal n (a + 10) "raw meat"
41data MyRecord = MyRecord { field1 :: Int, field2 :: String } deriving Generic
43--g :: Subtype s MyRecord => s -> String
44--g s = s ^. super @MyRecord . label @"field2"