{-# LANGUAGE GADTs #-} -- | LaCroix types and some "/helpful/" functions. -- -- 'LaCroix' is pronounced 'La-CROY'. It rhymes with 'enjoy'. module Lacroix ( LaCroix(..) , Flavor(..) , Curate(..) , NiCola(..) , flavorDescription , curateDescription , niColaDescription , laCroixDesciption , pronunciation ) where -- | Original LaCroix flavors. data Flavor = Pure | Lime | Lemon | Orange | Berry | CranRaspberry | Pamplemousse | PeachPear | Coconut | Apricot | PassionFruit | Mango | Tangerine | KeyLime deriving (Bounded, Enum, Eq, Show) -- | Cúrate LaCroix flavors. data Curate = PommeBaya | CeriseLimon | PinaFraise | KiwiSandia | MelonPomelo | MurePepino deriving (Bounded, Enum, Eq, Show) -- | NiCola LaCroix flavors. data NiCola = LaCola deriving (Bounded, Enum, Eq, Show) -- | LaCroix type. data LaCroix where LaCroix :: Flavor -> LaCroix LaCroixCurate :: Curate -> LaCroix LaCroixNiCola :: NiCola -> LaCroix -- | Describe a 'LaCroix'. laCroixDesciption :: LaCroix -> String laCroixDesciption (LaCroix flava ) = flavorDescription flava laCroixDesciption (LaCroixCurate flavaFlav) = curateDescription flavaFlav laCroixDesciption (LaCroixNiCola bigClock ) = niColaDescription bigClock -- | Describe a 'Flavor'. flavorDescription :: Flavor -> String flavorDescription flava = case flava of Pure -> "Pure: crisp, clean, and clear, the blue can is pure,\n" ++ "our only unflavored sparkling." Lime -> "Lime: is as good as it looks, always a crowd\n" ++ "pleaser." Lemon -> "Lemon: tastes better as a sparkling water, no\n" ++ "seeds or soggy fruit floater." Orange -> "Orange: the more things change the more they\n" ++ "stay the same as this tangy flavor is a fan\n" ++ "favorite!" Berry -> "Berry: hopefully you're switching to sparkling\n" ++ "because it's berry delicious!" CranRaspberry -> "Cran-Raspberry: a mixture of two great tastes\n" ++ "that's berry delightful with nothing artificial." Pamplemousse -> "Pamplemousse: it's the French translation for\n" ++ "the word grapefruit and show of humor from\n" ++ "this all-American brand." PeachPear -> "Peach Pear: combines the sweet smell of peach\n" ++ "with a rounded pear taste." Coconut -> "Coconut: summer in a can is great as a\n" ++ "mixer." Apricot -> "Apricot: is a 2014 new addition to the family\n" ++ "which brings a never-been-done-before flavor\n" ++ "to the sparkling water aisle!" PassionFruit -> "PassionFruit now available nationwide! Check\n" ++ "your local retailers as our newest flavor is added\n" ++ "to store shelves throught early 2015" Mango -> "Mango: another new flavor for 2014, mangos\n" ++ "are green on the outside with a slightly red hue\n" ++ "on top when ripe, thus the can colors." Tangerine -> "Tangerine: freshly peeled aroma and Tangerr-\n" ++ "EEN effervescence to transport your taste buds!\n" ++ "Available now in select markets." KeyLime -> "Starts with a creamy note of toasted meringue,\n" ++ "followed by the tart, crisp KeyLime essence,\n" ++ "trailing with a rich, graham cracker finish." -- | Describe a 'Curate'. curateDescription :: Curate -> String curateDescription flavaFlav = case flavaFlav of PommeBaya -> "Pomme Bayá: Translates to Apple-Berry. The\n" ++ "second of two new fantastique flavors inspired\n" ++ "by two cultures, French & Spanish. With bolder\n" ++ "flavors than others, and new tall cans too!" CeriseLimon -> "Cerise Limón: Translates to Cherry Lime. One of\n" ++ "two new fantastique flavors inspired by two\n" ++ "cultures, French & Spanish. With bolder flavor\n" ++ "than others, and new tall cans too!" PinaFraise -> "Piña Fraise: Translates to Pineapple Strawberry.\n" ++ "The newest fantastique flavor inspired by two\n" ++ "cultures, French & Spanish. With bolder flavors\n" ++ "than others, and new tall cans too!" KiwiSandia -> "freshly cut, bright watermelon wedges and juicy\n" ++ "slices of kiwi … now that is a perfect pairing!" MelonPomelo -> "ripe cantaloupe essence infused with pink\n" ++ "grapefruit… a tangy duo with a touch of\n" ++ "sweetness!" MurePepino -> "sweet & sour blackberry notes and the natural\n" ++ "earthiness of crisp cucumber create this unique\n" ++ "new flavor combination" -- | Describe a 'NiCola'. niColaDescription :: NiCola -> String niColaDescription bigClock = case bigClock of LaCola -> "The first of its kind, a revolutionary experience…\n" ++ "Natural cola *essenced* sparkling water\n" ++ "completely Innocent!\n\n" ++ "0 - Calorie\n" ++ "0 - Sweetener\n" ++ "0 - Sodium\n" ++ "= INNOCENT!" -- | Instructions for how to pronounce a 'LaCroix'. pronunciation :: LaCroix -> String pronunciation (LaCroix _) = "La-CROY, rhymes with enjoy." pronunciation (LaCroixCurate _) = "La-CROY, rhymes with enjoy.\n" ++ "Cúrate is COO-rah-tay." pronunciation (LaCroixNiCola _) = "La-CROY, rhymes with enjoy.\n" ++ "Nih-Cola."