uebung2017_3/src/AdressSys.hs
2017-05-08 11:16:38 +02:00

92 lines
2.1 KiB
Haskell

{-# LANGUAGE TemplateHaskell #-}
module AdressSys where
import Control.Lens
type ID = Integer
type DB = [(ID,[Datum])]
newtype Age = Age Integer deriving (Show,Eq)
newtype Name = Name String deriving (Show,Eq)
newtype City = City String deriving (Show,Eq)
newtype Email = Email String deriving (Show,Eq)
newtype Phone = Phone String deriving (Show,Eq)
newtype Street = Street String deriving (Show,Eq)
newtype Gender = Gender String deriving (Show,Eq)
newtype Postcode = Postcode String deriving (Show,Eq)
data Adress = Adress Name Street Postcode City deriving (Show,Eq)
data Public = Public Name (Maybe Age) (Maybe Email) deriving (Show,Eq)
data Datum = DName Name
| DStreet Street
| DPostcode Postcode
| DEmail Email
| DPhone Phone
| DGender Gender
| DCity City
| DAge Age
deriving (Show,Eq)
$(makePrisms ''Datum)
isName :: Datum -> Maybe Name
isName = firstOf _DName
isStreet :: Datum -> Maybe Street
isStreet = firstOf _DStreet
isPostcode :: Datum -> Maybe Postcode
isPostcode = firstOf _DPostcode
isEmail :: Datum -> Maybe Email
isEmail = firstOf _DEmail
isPhone :: Datum -> Maybe Phone
isPhone = firstOf _DPhone
isGender :: Datum -> Maybe Gender
isGender = firstOf _DGender
isAge :: Datum -> Maybe Age
isAge = firstOf _DAge
isCity :: Datum -> Maybe City
isCity = firstOf _DCity
getName :: [Datum] -> Maybe Name
getName = firstOf (traverse._DName)
getStreet :: [Datum] -> Maybe Street
getStreet = firstOf (traverse._DStreet)
getPostcode :: [Datum] -> Maybe Postcode
getPostcode = firstOf (traverse._DPostcode)
getEmail :: [Datum] -> Maybe Email
getEmail = firstOf (traverse._DEmail)
getPhone :: [Datum] -> Maybe Phone
getPhone = firstOf (traverse._DPhone)
getGender :: [Datum] -> Maybe Gender
getGender = firstOf (traverse._DGender)
getAge :: [Datum] -> Maybe Age
getAge = firstOf (traverse._DAge)
getCity :: [Datum] -> Maybe City
getCity = firstOf (traverse._DCity)
getDataFromID :: ID -> DB -> Maybe [Datum]
getDataFromID iD = lookup iD