{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
data VersionNumber
= VersionNumber
[ VersionCompound
] deriving ( Show )
data MaturityLevel = Dev
| Test
| User
| ReleaseCandidate
| Prod
data Version = MaturityVersion MaturityLevel VersionNumber
| Version VersionNumber
deriving ( Show )
class ToString a where
instance ToString VersionCompound where
toString
( Just n
) = ( show n
) toString Nothing = "x"
instance ToString [ VersionCompound] where
toString [ ] = ""
toString ( x:[ ] ) = ( toString x)
toString ( x:xs) = ( toString x) ++ "." ++ ( toString xs)
instance ToString VersionNumber where
toString ( VersionNumber [ ] ) = ""
toString ( VersionNumber ( x:[ ] ) ) = ( toString x)
toString ( VersionNumber ( x:xs) ) = ( toString x) ++ "." ++ ( toString xs)
instance ToString Version where
toString
( MaturityVersion maturityLevel versionNumber
) = ( show maturityLevel
) ++ "/" ++ ( toString versionNumber
) toString ( Version versionNumber) = ( toString versionNumber)
instance Show Version
where show version
= toString version
main
= putStrLn $ print ( Version
( VersionNumber
[ Just
1 , Just
2 , Nothing
] ) )
ey0jIExBTkdVQUdFIFR5cGVTeW5vbnltSW5zdGFuY2VzLCBGbGV4aWJsZUluc3RhbmNlcyAjLX0KCmltcG9ydCBEYXRhLk1heWJlCgp0eXBlIFZlcnNpb25Db21wb3VuZCA9IE1heWJlIEludAoKZGF0YSBWZXJzaW9uTnVtYmVyID0gVmVyc2lvbk51bWJlciBbVmVyc2lvbkNvbXBvdW5kXSBkZXJpdmluZyAoU2hvdykKCmRhdGEgTWF0dXJpdHlMZXZlbCA9IERldgogICAgICAgICAgICAgICAgICAgfCBUZXN0CiAgICAgICAgICAgICAgICAgICB8IFVzZXIKICAgICAgICAgICAgICAgICAgIHwgUmVsZWFzZUNhbmRpZGF0ZQogICAgICAgICAgICAgICAgICAgfCBQcm9kCiAgICAgICAgICAgICAgICAgICBkZXJpdmluZyAoU2hvdykKCmRhdGEgVmVyc2lvbiA9IE1hdHVyaXR5VmVyc2lvbiBNYXR1cml0eUxldmVsIFZlcnNpb25OdW1iZXIgIAogICAgIHwgVmVyc2lvbiBWZXJzaW9uTnVtYmVyIGRlcml2aW5nIChTaG93KQoKY2xhc3MgVG9TdHJpbmcgYSB3aGVyZQogICAgdG9TdHJpbmcgOjogYSAtPiBTdHJpbmcKCmluc3RhbmNlIFRvU3RyaW5nIFZlcnNpb25Db21wb3VuZCB3aGVyZQogICAgdG9TdHJpbmcgKEp1c3QgbikgPSAoc2hvdyBuKQogICAgdG9TdHJpbmcgTm90aGluZyA9ICJ4IgoKaW5zdGFuY2UgVG9TdHJpbmcgW1ZlcnNpb25Db21wb3VuZF0gd2hlcmUKICAgIHRvU3RyaW5nIFtdID0gIiIgCiAgICB0b1N0cmluZyAoeDpbXSkgPSAodG9TdHJpbmcgeCkKICAgIHRvU3RyaW5nICh4OnhzKSA9ICh0b1N0cmluZyB4KSArKyAiLiIgKysgKHRvU3RyaW5nIHhzKSAKCmluc3RhbmNlIFRvU3RyaW5nIFZlcnNpb25OdW1iZXIgd2hlcmUKICAgIHRvU3RyaW5nIChWZXJzaW9uTnVtYmVyIFtdKSA9ICIiIAogICAgdG9TdHJpbmcgKFZlcnNpb25OdW1iZXIgKHg6W10pKSA9ICh0b1N0cmluZyB4KSAKICAgIHRvU3RyaW5nIChWZXJzaW9uTnVtYmVyICh4OnhzKSkgPSAodG9TdHJpbmcgeCkgKysgIi4iICsrICh0b1N0cmluZyB4cykKCmluc3RhbmNlIFRvU3RyaW5nIFZlcnNpb24gd2hlcmUKICAgIHRvU3RyaW5nIChNYXR1cml0eVZlcnNpb24gbWF0dXJpdHlMZXZlbCB2ZXJzaW9uTnVtYmVyKSA9IChzaG93IG1hdHVyaXR5TGV2ZWwpICsrICIvIiArKyAodG9TdHJpbmcgdmVyc2lvbk51bWJlcikKICAgIHRvU3RyaW5nIChWZXJzaW9uIHZlcnNpb25OdW1iZXIpID0gKHRvU3RyaW5nIHZlcnNpb25OdW1iZXIpCgppbnN0YW5jZSBTaG93IFZlcnNpb24gd2hlcmUKICAgIHNob3cgdmVyc2lvbiA9IHRvU3RyaW5nIHZlcnNpb24KCm1haW4gPSBwdXRTdHJMbiAkIHByaW50IChWZXJzaW9uICggVmVyc2lvbk51bWJlciBbIEp1c3QgMSwgSnVzdCAyLCBOb3RoaW5nXSkgKQ==