Normalizable
type-class{-# LANGUAGE NoImplicitPrelude #-}
module Main where
import Prelude
import Data.Char (toLower)
main :: IO ()
main = putStrLn $ if test then "SUCCESS" else "FAILURE"
newtype Name = Name { unName :: String } deriving (Eq)
newtype Domain = Domain { unDomain :: String } deriving (Eq)
data Email = Email { name :: Name, domain :: Domain } deriving (Eq)
test :: Bool
test = let normalized = Email (Name "tony") (Domain "stark.com") in
and [ normalize (Email (Name "tony") (Domain "stark.com")) == normalized
, normalize (Email (Name "Tony") (Domain "Stark.com")) == normalized
]
class Normalizable a where
normalize :: a -> a
-- TODO: This program doesn't compile. Define the missing function(s) incl. type signatures!
{-# LANGUAGE NoImplicitPrelude #-}
module Main where
import Prelude
import Data.Char (toLower)
main :: IO ()
main = putStrLn $ if test then "SUCCESS" else "FAILURE"
newtype Name = Name { unName :: String } deriving (Eq)
newtype Domain = Domain { unDomain :: String } deriving (Eq)
data Email = Email { name :: Name, domain :: Domain } deriving (Eq)
test :: Bool
test = let normalized = Email (Name "tony") (Domain "stark.com") in
and [ normalize (Email (Name "tony") (Domain "stark.com")) == normalized
, normalize (Email (Name "Tony") (Domain "Stark.com")) == normalized
]
class Normalizable a where
normalize :: a -> a
-- DONE
instance Normalizable Name where
normalize = Name . fmap toLower . unName
instance Normalizable Domain where
normalize = Domain . fmap toLower . unDomain
instance Normalizable Email where
normalize email = Email (normalize . name $ email) (normalize . domain $ email)