これも仕事をするより初心者のアプローチです。おそらくエレガンスの評価ではマイナスのスコアですが、非常にシンプルです。
自分で書いている場合は、以下をのぞかないでください。私はそれがこれより短いに違いない:-)
ghci の各コンポーネント関数を呼び出して分解できるはずです。
type Product = String
type Count = Float -- type chosen for simple arithmetic
type Price = Float
type Bill = [(Count, Product, Price)]
type LinePrice = (Product, Price)
myBill :: Bill
myBill = [ (4.0, "Bananas", 0.30), (1.0, "Apple", 0.50), (2.0, "Eggs", 0.25) ]
priceList :: Bill -> [LinePrice]
priceList = map (\(ct,prd,prc) -> (prd, ct*prc))
maxItem :: [LinePrice] -> LinePrice
maxItem lst = maxItem_m ("none",0.0) lst
maxItem_m :: LinePrice -> [LinePrice] -> LinePrice
maxItem_m max [] = max
maxItem_m (prd_m,prc_m) ((prd,prc):rest)
| prc > prc_m = maxItem_m (prd,prc) rest
| otherwise = maxItem_m (prd_m,prc_m) rest
main = do
let mostExpensive = maxItem $ priceList myBill
print mostExpensive