|
|
|
#! /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
|
|
|
|
|
|
|
|
unitCost :: Recipe -> Double -> Double
|
|
|
|
unitCost (Recipe _ _ qtt _) totalCost = totalCost / qtt
|
|
|
|
|
|
|
|
useCost :: Recipe -> Double -> Double
|
|
|
|
useCost (Recipe _ _ _ uses) totalCost = totalCost / uses
|
|
|
|
|
|
|
|
(→) :: Ingredient -> Double -> UsedIngredient
|
|
|
|
(→) ingredient qtt = UsedIngredient ingredient qtt
|
|
|
|
|
|
|
|
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"
|
|
|
|
[ eau → 2.5
|
|
|
|
, savonMarseille → 0.1
|
|
|
|
, bicarbonate → 0.016
|
|
|
|
, vinaigreBlanc → 0.03
|
|
|
|
]
|
|
|
|
2.5
|
|
|
|
30
|
|
|
|
|
|
|
|
main = do
|
|
|
|
putStrLn "Calcul du coût des recettes\n"
|
|
|
|
putStrLn "* Lessive :"
|
|
|
|
print lessive
|
|
|
|
let lessiveTotalCost = recipeCost lessive
|
|
|
|
lessiveUnitCost = unitCost lessive lessiveTotalCost
|
|
|
|
lessiveUseCost = useCost lessive lessiveTotalCost
|
|
|
|
putStrLn $ " * Prix Total = " ++ show lessiveTotalCost ++ "€"
|
|
|
|
putStrLn $ " * Prix au litre = " ++ show lessiveUnitCost ++ "€"
|
|
|
|
putStrLn $ " * Prix par utilisation = " ++ show lessiveUseCost ++ "€"
|
|
|
|
|