wvogel日記

自分用の技術備忘録が多めです.

収支記録

Haskellで、モナドの勉強と、関数内で、値を返しさらにそれに続く処理をさせるため描いていた、簡単な収支記録プログラム
テキストファイルに、お金の出入りを正負の符号で記録、その合計値を表示するというのが最終目標

import IO

filename = "recordmoney.txt"

main = do foperate <- openFile filename ReadMode
          cs <- hGetContents foperate
          print (money cs) >> (putStr $ unlines $ recordMode '0')
     hClose foperate
      where
          money = sum.map read.words

recordMode :: Char -> [String]
recordMode '0' = "1.record\n2.exit\n--->": ( recordMode '1')
recordMode '1' = "\n--->":(recordMode '2')
recordMode _ = ["Thank you for your using..."]


見ての通り、全く出来てない笑
ただ、recordMode内の文字を表示していくだけです
recodeMode関数から自身を呼び出すとき、

getLine >>= recordMode.head.return

などとして、選択肢をgetLineなどで受け取りたいのですが、それをすると、
Charで処理するところがIO Charになってしまいコンパイルできない
で、
IO Char -> Char
とする方法が分からない
それができれば少なくとも、main以外の関数内で入出力処理をすることができるのだけど
うーむ