Name: Anonymous 2013-02-14 15:05
-- Kana - A tool for learning the Kana
-- v0.0
--
-- (c) 2013 by /prog/
module Kana ( main ) where
import Control.Monad
import Test.QuickCheck
data Syllable = Syllable { kana :: String, romaji :: String }
deriving (Eq, Show)
newtype Hiragana = Hiragana Syllable
instance Arbitrary Hiragana where
arbitrary = elements hiraganas
newtype HiraganaWord = HiraganaWord [Hiragana]
instance Arbitrary HiraganaWord where
arbitrary = do
n <- choose (5, 10)
hs <- vectorOf n arbitrary
return $ HiraganaWord hs
type Word = [Syllable]
kanas :: Word -> String
kanas = concatMap kana
romajis :: Word -> String
romajis = concatMap romaji
hiraganas :: [Hiragana]
hiraganas = map (Hiragana . uncurry Syllable)
[ ("あ", "a" ), ("い", "i" ), ("う", "u" ), ("え", "e" ), ("お", "o" )
, ("か", "ka"), ("き", "ki" ), ("く", "ku" ), ("け", "ke"), ("こ", "ko")
, ("さ", "sa"), ("し", "shi"), ("す", "su" ), ("せ", "se"), ("そ", "so")
, ("た", "ta"), ("ち", "chi"), ("つ", "tsu"), ("て", "te"), ("と", "to")
, ("な", "na"), ("に", "ni" ), ("ぬ", "nu" ), ("ね", "ne"), ("の", "no")
, ("は", "ha"), ("ひ", "hi" ), ("ふ", "fu" ), ("へ", "he"), ("ほ", "ho")
, ("ま", "ma"), ("み", "mi" ), ("む", "mu" ), ("め", "me"), ("も", "mo")
, ("や", "ya"), ("ゆ", "yu" ), ("よ", "yo")
, ("ら", "ra"), ("り", "ri" ), ("る", "ru" ), ("れ", "re"), ("ろ", "ro")
, ("わ", "wa"), ("を", "wo")
, ("ん", "n" )
]
question :: IO Word
question = do
(s:_) <- sample' (arbitrary :: Gen HiraganaWord)
return $ unpack s
where unpack (HiraganaWord hs) = map (\(Hiragana s) -> s) hs
check :: String -> Word -> Bool
check is word = let should = romajis word in
is == should
main :: IO ()
main = forever $ do
q <- question
putStrLn $ kanas q
a <- getLine
putStrLn $ if check a q
then "ヘ(^_^ヘ)(ノ^_^)ノ"
else romajis q ++ "\n(╯°□°)╯︵ ┻━┻"
putStrLn ""There is a lot missing still, so feel free to contribute!!!
^_^