From 98329e0a3dd4f78b5d815ac3896272ec70904901 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Thu, 11 Dec 2025 10:28:11 +0100 Subject: Add remaining haskell book exercises --- Haskell-book/14/morse/src/Morse.hs | 68 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Haskell-book/14/morse/src/Morse.hs (limited to 'Haskell-book/14/morse/src/Morse.hs') diff --git a/Haskell-book/14/morse/src/Morse.hs b/Haskell-book/14/morse/src/Morse.hs new file mode 100644 index 0000000..03193e5 --- /dev/null +++ b/Haskell-book/14/morse/src/Morse.hs @@ -0,0 +1,68 @@ +module Morse + ( Morse + , charToMorse + , morseToChar + , stringToMorse + , letterToMorse + , morseToLetter + ) where + +import qualified Data.Map as M + +type Morse = String + +letterToMorse :: (M.Map Char Morse) +letterToMorse = M.fromList [ + ('a', ".-") + , ('b', "-...") + , ('c', "-.-.") + , ('d', "-..") + , ('e', ".") + , ('f', "..-.") + , ('g', "--.") + , ('h', "....") + , ('i', "..") + , ('j', ".---") + , ('k', "-.-") + , ('l', ".-..") + , ('m', "--") + , ('n', "-.") + , ('o', "---") + , ('p', ".--.") + , ('q', "--.-") + , ('r', ".-.") + , ('s', "...") + , ('t', "-") + , ('u', "..-") + , ('v', "...-") + , ('w', ".--") + , ('x', "-..-") + , ('y', "-.--") + , ('z', "--..") + , ('1', ".----") + , ('2', "..---") + , ('3', "...--") + , ('4', "....-") + , ('5', ".....") + , ('6', "-....") + , ('7', "--...") + , ('8', "---..") + , ('9', "----.") + , ('0', "-----") + ] + +morseToLetter :: M.Map Morse Char +morseToLetter = + M.foldWithKey (flip M.insert) M.empty + letterToMorse + +charToMorse :: Char -> Maybe Morse +charToMorse c = + M.lookup c letterToMorse + +stringToMorse :: String -> Maybe [Morse] +stringToMorse s = + sequence $ fmap charToMorse s + +morseToChar :: Morse -> Maybe Char +morseToChar m = M.lookup m morseToLetter \ No newline at end of file -- cgit v1.2.3