packages feed

route-planning-0.0.3: src/Data/Geo/Route/Email.hs

module Data.Geo.Route.Email(
  Email
, mkEmail
, emailId
, emailDomain
, HasEmail(..)
, HasMaybeEmail(..)
) where

import Prelude(Show)
import Data.Geo.Route.Gpx(Gpx(gpx))
import Control.Lens(Lens', lens)
import Data.Function(id)
import Data.Maybe(Maybe)
import Data.String(String)
import Data.Eq(Eq)
import Data.Ord(Ord)
import Text.Printf(printf)

data Email =
  Email
    String -- id
    String -- domain
  deriving (Eq, Ord, Show)

mkEmail ::
  String
  -> String
  -> Email
mkEmail =
  Email

emailId ::
  Lens' Email String
emailId =
  lens (\(Email i _) -> i) (\(Email _ d) i -> Email i d)

emailDomain ::
  Lens' Email String
emailDomain =
  lens (\(Email _ d) -> d) (\(Email i _) d -> Email i d)

instance Gpx Email where
  gpx (Email i d) =
    printf "<email id=\"%s\" domain=\"%s\"/>" i d

class HasEmail t where
  email ::
    Lens' t Email

instance HasEmail Email where
  email =
    id

class HasMaybeEmail t where
  memail ::
    Lens' t (Maybe Email)