Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Kana.hs

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!!!
^_^

Name: Anonymous 2013-02-14 16:14

If you need a program (or any sort of helper like this) to learn kana, you're probably not fit to learn Japanese.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List