Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
24
Task/Menu/Haskell/menu-1.hs
Normal file
24
Task/Menu/Haskell/menu-1.hs
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
module RosettaSelect where
|
||||
|
||||
import Data.Maybe (listToMaybe)
|
||||
import Control.Monad (guard)
|
||||
|
||||
select :: [String] -> IO String
|
||||
select [] = return ""
|
||||
select menu = do
|
||||
putStr $ showMenu menu
|
||||
putStr "Choose an item: "
|
||||
choice <- getLine
|
||||
maybe (select menu) return $ choose menu choice
|
||||
|
||||
showMenu :: [String] -> String
|
||||
showMenu menu = unlines [show n ++ ") " ++ item | (n, item) <- zip [1..] menu]
|
||||
|
||||
choose :: [String] -> String -> Maybe String
|
||||
choose menu choice = do
|
||||
n <- maybeRead choice
|
||||
guard $ n > 0
|
||||
listToMaybe $ drop (n-1) menu
|
||||
|
||||
maybeRead :: Read a => String -> Maybe a
|
||||
maybeRead = fmap fst . listToMaybe . filter (null . snd) . reads
|
||||
8
Task/Menu/Haskell/menu-2.hs
Normal file
8
Task/Menu/Haskell/menu-2.hs
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
*RosettaSelect> select ["fee fie", "huff and puff", "mirror mirror", "tick tock"]
|
||||
1) fee fie
|
||||
2) huff and puff
|
||||
3) mirror mirror
|
||||
4) tick tock
|
||||
Choose an item: 3
|
||||
"mirror mirror"
|
||||
*RosettaSelect>
|
||||
Loading…
Add table
Add a link
Reference in a new issue