Quick actions

cmd+k|ctrl+k

Navigation

Languages

Haskell Survik 'oop'

Snippet info

Language

Haskell

Visibility

public

Author

jsonkody

Created

2024-03-04T10:24:55.17066Z

Updated

2024-03-04T10:31:01.330848Z

{-# LANGUAGE RecordWildCards #-}

module Main where

import Control.Monad.State

data Item = Item {
    name        :: String,
    description :: String,
    useTime     :: Int,
    useCount    :: Int
}

type TotalItemsCreated = Int

useItem :: Item -> State TotalItemsCreated String
useItem item@Item{..} = do
    modify (+1)
    return $ "Používá se " ++ name ++ " (" ++ description ++ "), což trvá " ++ show useTime ++ " sekund. Počet použití: " ++ show (useCount + 1)

data Survik = Survik {
    survikName :: String,
    item       :: Item
}

useSurvikItem :: Survik -> State TotalItemsCreated String
useSurvikItem Survik{..} = do
    itemLine <- useItem item
    return $ survikName ++ " používá " ++ name item ++ ": " ++ itemLine

main :: IO ()
main = do
    let baterka = Item "Baterka" "osvětluje cestu" 0 0
        lekarnicka = Item "Lékárnička" "léčí zranění" 20 0
        pepa = Survik "Pepik the survik" baterka
    
    let (result, totalItems) = runState (useSurvikItem pepa >> useSurvikItem (pepa { item = lekarnicka })) 0
    
    putStrLn result
    print totalItems
INFO