{-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE OverloadedLists #-} {-# LANGUAGE OverloadedStrings #-} module Person4 where import Control.Applicative import Data.Generics.Labels () import Person import Person2 import Schemas -- | v3 adds recursive field 'spouse', which leads to cycles data Person4 = Person4 { name :: String , age :: Int , addresses :: [String] , religion :: Maybe Religion , education :: [Education] , a1,a2,a3,a4,a5 ,a6,a7,a8,a9,a10 , b1,b2,b3,b4,b5,b6,b7,b8,b9,b10 , c1,c2,c3,c4,c5,c6,c7,c8,c9,c10 , d1,d2,d3,d4,d5,d6,d7,d8,d9,d10 :: Bool } deriving (Eq, Show) instance HasSchema Person4 where schema = record $ Person4 <$> field "name" Person4.name <*> field "age" Person4.age <*> field "addresses" Person4.addresses <*> optField "religion" Person4.religion <*> ( field "studies" Person4.education <|> field "education" Person4.education ) <*> grab "a1" a1 <*> grab "a2" a2 <*> grab "a3" a3 <*> grab "a4" a4 <*> grab "a5" a5 <*> grab "a6" a6 <*> grab "a7" a7 <*> grab "a8" a8 <*> grab "a9" a9 <*> grab "a10" a10 <*> grab "b1" b1 <*> grab "b2" b2 <*> grab "b3" b3 <*> grab "b4" b4 <*> grab "b5" b5 <*> grab "b6" b6 <*> grab "b7" b7 <*> grab "b8" b8 <*> grab "b9" b9 <*> grab "b10" b10 <*> grab "c1" c1 <*> grab "c2" c2 <*> grab "c3" c3 <*> grab "c4" c4 <*> grab "c5" c5 <*> grab "c6" c6 <*> grab "c7" c7 <*> grab "c8" c8 <*> grab "c9" c9 <*> grab "c10" c10 <*> grab "d1" d1 <*> grab "d2" d2 <*> grab "d3" d3 <*> grab "d4" d4 <*> grab "d5" d5 <*> grab "d6" d6 <*> grab "d7" d7 <*> grab "d8" d8 <*> grab "d9" d9 <*> grab "d10" d10 where grab n get = field n get <|> pure False pepe4 :: Person4 pepe4 = Person4 "Pepe" 38 ["2 Edward Square", "La Mar 10"] Nothing [PhD "Computer Science", Degree "Engineering"] False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False