#! /usr/bin/env runhaskell data Ingredient = Ingredient { ingredientName :: String , unit_cost :: Double }deriving (Show) data UsedIngredient = UsedIngredient { ingredient :: Ingredient, quantityUsed :: Double }deriving (Show) data Recipe = Recipe { recipeName :: String , billOfMaterial :: [ UsedIngredient ] , finalQuantity :: Double , useNumber :: Double }deriving (Show) recipeCost :: Recipe -> Double recipeCost (Recipe _ bom _ _) = sum . map ingredientCost $ bom ingredientCost :: UsedIngredient -> Double ingredientCost (UsedIngredient (Ingredient _ uCost) qtt) = uCost * qtt prixLitre prixTotal quantiteLessive = prixTotal / quantiteLessive prixUtilisation prixTotal quantiteLessive = prixTotal / nombreUtilisations eau = Ingredient "Eau" 0.003 savonMarseille = Ingredient "Savon de Marseille" 3.36 bicarbonate = Ingredient "Bicarbonate de soude" 3.81 vinaigreBlanc = Ingredient "Vinaigre blanc" 0.36 lessive :: Recipe lessive = Recipe "Lessive" [ UsedIngredient eau 2.5 , UsedIngredient savonMarseille 0.1 , UsedIngredient bicarbonate 0.016 , UsedIngredient vinaigreBlanc 0.03 ] 2.5 30 quantiteLessive = 2.5 nombreUtilisations = 30 main = do putStrLn "Calcul du coût des recettes\n" putStrLn "* Lessive :" print lessive putStrLn $ " * Prix Total = " ++ show (recipeCost lessive) ++ "€" -- putStrLn $ " * Prix au litre = " ++ show prixLitre ++ "€" -- putStrLn $ " * Prix par utilisation = " ++ show prixUtilisation ++ "€"