aboutsummaryrefslogtreecommitdiff
path: root/Haskell-book/14/morse/src/Morse.hs
diff options
context:
space:
mode:
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