aboutsummaryrefslogtreecommitdiff
path: root/Haskell-book/14/morse/src/Morse.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2025-12-11 10:28:11 +0100
committerEugen Wissner <belka@caraus.de>2025-12-11 10:28:11 +0100
commit98329e0a3dd4f78b5d815ac3896272ec70904901 (patch)
tree80f9c56cfe2ac20232358f236d32e84bd683be1b /Haskell-book/14/morse/src/Morse.hs
parent3624c712d72d246f21d4e710cec7c11e052e0326 (diff)
downloadbook-exercises-98329e0a3dd4f78b5d815ac3896272ec70904901.tar.gz
Add remaining haskell book exercises
Diffstat (limited to 'Haskell-book/14/morse/src/Morse.hs')
-rw-r--r--Haskell-book/14/morse/src/Morse.hs68
1 files changed, 68 insertions, 0 deletions
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