module Roman where
import Numeric
import Maybe
import Data.Ratio
import Char
import Prelude
Roman.safeRead v445 v446
=
case ((Data._CharNumeric.readDec v445
) v446
) of
Prelude.
[] ->
(Prelude.fromInteger
(Prelude.Prelude.Real.Prelude.Num
(Prelude.Prelude.Integral.Prelude.Real v445
)))
0
(Prelude.:
) v447 v448
->
case v447
of
Prelude.
(,) v449 v450
-> v449
Roman.numerals v451
=
(Prelude.:
)
(Prelude.
(,) 'I' ((Prelude.fromInteger v451
) 1
))
((Prelude.:
)
(Prelude.
(,) 'V' ((Prelude.fromInteger v451
) 5
))
((Prelude.:
)
(Prelude.
(,) 'X' ((Prelude.fromInteger v451
) 10
))
((Prelude.:
)
(Prelude.
(,) 'L' ((Prelude.fromInteger v451
) 50
))
((Prelude.:
)
(Prelude.
(,) 'C' ((Prelude.fromInteger v451
) 100
))
((Prelude.:
)
(Prelude.
(,) 'D' ((Prelude.fromInteger v451
) 500
))
((Prelude.:
)
(Prelude.
(,) 'M' ((Prelude.fromInteger v451
) 1000
))
Prelude.
[]))))))
Roman.maxmunch v452 v453
=
case v453
of
Prelude.
[] -> Prelude.
[]
(Prelude.:
) v454 v455
->
let Roman.91:95-7:95
= Prelude.span
((Prelude.Prelude.Eq.Prelude.Char.==
) v454
)
v453
Roman.Roman.Prelude.226.these
= Roman._LAMBDA480 Roman.91:95-7:95
Roman.Roman.Prelude.227.those
= Roman._LAMBDA481 Roman.91:95-7:95
in (Prelude.:
)
(((Prelude.*
) v452
)
(Data.Maybe.fromJust
(Prelude.lookup
Prelude.Prelude.Eq.Prelude.Char
v454
(Roman.numerals v452
)))
(Roman.Roman.Prelude.228.length
v452
Roman.Roman.Prelude.226.these
))
(Roman.maxmunch v452 Roman.Roman.Prelude.227.those
)
Roman._LAMBDA481 Roman.91:95-7:95
=
case Roman.91:95-7:95
of
Prelude.
(,) v464 v465
-> v465
Roman._LAMBDA480 Roman.91:95-7:95
=
case Roman.91:95-7:95
of
Prelude.
(,) v462 v463
-> v462
Roman.fromNumeral v466 v467 v468 v469
=
case (((Prelude.<
) v467
) v468 v469
) of
Prelude.True
-> ((Prelude.-
) v466
) v469 v468
Prelude.False
->
case (((Prelude.>
) v467
) v468 v469
) of
Prelude.True
-> ((Prelude.+
) v466
) v469 v468
Prelude.False
-> Prelude.error
Roman._LAMBDA482
Roman.subnums =
(Prelude.:
)
(Prelude.
(,) 'V' 'I')
((Prelude.:
)
(Prelude.
(,) 'X' 'I')
((Prelude.:
)
(Prelude.
(,) 'L' 'X')
((Prelude.:
)
(Prelude.
(,) 'C' 'X')
((Prelude.:
)
(Prelude.
(,) 'D' 'C')
((Prelude.:
) (Prelude.
(,) 'M' 'C') Prelude.
[])))))
Roman.toNumeral v470 v471 v472 v473
=
case v472
of
Prelude.
(,) v474 v475
->
case v473
of
Prelude.
(,) v476 v477
->
let Roman.Roman.Prelude.220.tdigit
= Data.Maybe.fromMaybe
'\NUL'
(Prelude.lookup
Prelude.Prelude.Eq.Prelude.Char
v474
Roman.subnums)
in case (((Prelude.>=
) v471
) v476 v475
) of
Prelude.True
->
Roman.toNumeral
v470
v471
v472
(Prelude.
(,)
(((Prelude.-
) v470
) v476 v475
)
((Prelude.:
) v474 v477
))
Prelude.False
->
case (((Prelude.>=
) v471
)
(((Prelude.+
) v470
)
v476
((Roman.Roman.Prelude.221.k
Roman.Roman.Prelude.220.tdigit
)
v470
))
v475
) of
Prelude.True
->
Prelude.
(,)
(((Prelude.+
) v470
)
(((Prelude.-
) v470
) v476 v475
)
((Roman.Roman.Prelude.221.k
Roman.Roman.Prelude.220.tdigit
)
v470
))
((Prelude.:
)
v474
((Prelude.:
) Roman.Roman.Prelude.220.tdigit v477
))
Prelude.False
->
case Prelude.otherwise
of
Prelude.True
-> Prelude.
(,) v476 v477
Prelude.False
-> Prelude.error
Roman._LAMBDA483
_
-> Prelude.error
Roman._LAMBDA483
_
-> Prelude.error
Roman._LAMBDA483
Roman.Roman.Prelude.221.k Roman.Roman.Prelude.220.tdigit v478
=
Data.Maybe.fromMaybe
((Prelude.fromInteger v478
) 0
)
(Prelude.lookup
Prelude.Prelude.Eq.Prelude.Char
Roman.Roman.Prelude.220.tdigit
(Roman.numerals v478
))