> module Main where

> import IO
> main = do putStr "Masukan angka positif tidak melebihi 3500!"
>           n <- readNum
>           putStr ("==> " ++ show (romawi st) ++ "\n")
>        where readNum :: IO Int
>              readNum = do { baris <- getLine; readIO baris }

Fungsi untuk menampilkan hasil.  

> romawi :: String -> String
> romawi st = ribuan st ++ ratusan st ++ puluhan st ++ satuan st 

        Fungsi untuk mengubah digit ribuan (karakter pertama dari string input)
        ke angka Romawi. Fungsi REPLICATE menampilkan karakter `M` sebanyak n.
        Fungsi READ membaca string ch sesuai nilai yang tertulis. Karakter ch 
        diubah menjadi string terlebih dahulu.

> ribuan :: String -> String
> ribuan (c:cs) = replicate (read [ch]) `M`

        Fungsi untuk memberikan input ke fungsi ARTIROMAWI, input berupa karak-
        ter kedua dari string (digit ratusan), hasil diberi kode "ratusan" seba-	
        gai input untuk fungsi CONVERTER.

> ratusan :: String -> (String, Char)
> ratusan (_:c:cs) = artiRomawi ("ratusan", c)

        Memberikan digit puluhan sebagai input fungsi ARTIROMAWI. 

> puluhan :: String -> (String, Char) 
> puluhan (_:_:c:cs) = artiRomawi ("puluhan", c)

        Memberikan digit satuan sebagai input fungsi ARTIROMAWI. Kode tidak per-	
        lu diberikan.

> satuan :: String -> (String, Char)
> satuan (_:_:_:c) = artiRomawi ("", c)

        Fungsi yang mengubah karakter ke angka Romawi (I, V atau X) yang akan 
        diubah ke bentuk yang diinginkan oleh fungsi CONVERTER berdasarkan kode
        yang tercantum. 

> artiRomawi :: (String, Char) -> String
> artiRomawi (st, ch)
>       | ch == `9`        = converter (st, "IX")
>       | v >= 5 && v <= 8 = converter (st, "V" ++ replicate (v-5) `I`)
>       | ch == `4`        = converter (st, "IV")
>       | otherwise        = converter (st, replicate v `I`)
>                            where
>                            v = read [ch]

        Fungsi yang mengubah karakter I, V dan X ke bentuk yang diinginkan ber-
        dasarkan kode yang tercantum. Fungsi tail mengembalikan string dengan 
        menghilangkan elemen pertama.

> converter :: (String, String) -> String
> converter (a, b)
>       | b == ""                        = ""
>       | a == "ratusan" && b == (`I`:_) = "C" ++ converter (a, tail b) 
>       | a == "ratusan" && b == (`V`:_) = "D" ++ converter (a, tail b)
>       | a == "ratusan" && b == (`X`:_) = "M" 
>       | a == "puluhan" && b == (`I`:_) = "X" ++ converter (a, tail b)
>       | a == "puluhan" && b == (`V`:_) = "L" ++ converter (a, tail b)
>       | a == "puluhan" && b == (`X`:_) = "C"
>       | otherwise                      = b
	
	
