readを作ってみよう
30分プログラム、その419。そういえばshowは結構書いたことあるけど、readは書いたことがなかったことに気がついたので書いてみた。
正直、良くわからなん。どうも中置演算子の優先順位を考慮してreadを書かないといけないっぽいんだけど・・・。まあ、deriving Showすればreadもできるし、それでいいか。
使い方
*Main> Complex (1,2) 1+2i *Main> read "1+2i" :: Complex 1+2i
ソースコード
import Data.List import Text.Printf data Complex = Complex (Int,Int) instance Show Complex where show (Complex (x,y)) = printf "%d+%di" x y instance Read Complex where readsPrec _ r = let (real,_:r') = break (== '+') r (image,_:rest) = break (== 'i') r' in [(Complex (read real,read image),rest)]