diff --git a/Intro.pdf b/Intro.pdf new file mode 100644 index 0000000..ffb6c43 Binary files /dev/null and b/Intro.pdf differ diff --git a/Monad.pdf b/Monad.pdf new file mode 100644 index 0000000..452ce9e Binary files /dev/null and b/Monad.pdf differ diff --git a/QuickTour.pdf b/QuickTour.pdf new file mode 100644 index 0000000..db50325 Binary files /dev/null and b/QuickTour.pdf differ diff --git a/Tools.pdf b/Tools.pdf new file mode 100644 index 0000000..65d3d51 Binary files /dev/null and b/Tools.pdf differ diff --git a/code/Monad.hs b/code/Monad.hs new file mode 100644 index 0000000..2db61c5 --- /dev/null +++ b/code/Monad.hs @@ -0,0 +1,34 @@ +module Monad where + +import Data.Char +import System.Random + +-------------------------------------------------------------------------------- +-- Computations that might fail: transform english words to chinese numerals + +numeralToDigit :: String -> Maybe Char +numeralToDigit w = lookup w digits + where + digits = [("null", '0'), + ("zero", '0'), + ("one", '1'), + ("two", '2'), + ("three", '3'), + ("four", '4'), + ("fivx", '5'), + ("six", '6'), + ("seven", '7'), + ("eight", '8'), + ("nine", '9')] + +digitToVal :: Char -> Maybe Int +digitToVal d | d `elem` ['0'..'9'] = Just (ord d - ord '0') + | otherwise = Nothing + +-- A safe variant of (!!) +at :: Int -> [a] -> Maybe a +at i xs | 0 <= i && i < length xs = Just (xs !! i) + | otherwise = Nothing + +chineseNumeral :: Int -> Maybe Char +chineseNumeral n = at n "零一二三四五六七八九"