92 lines
2.1 KiB
Haskell
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
|
|
|
|
|
|
|