[Haskell-cafe] Instantiation problem
Patrick Browne
patrick.browne at dit.ie
Fri Jan 28 12:42:48 CET 2011
Below is some code that is produces information about the *types* used
for measuring (e.g. metres). The following evaluation returns 1.00
which the convert factor for metres.
convertFactorToBaseUnit (unit (LengthInMetres 7))
.
The next evaluation returns the type, Metre, of data being measured
unit (LengthInMetres 7)
Using the particular definitions below is it possible to make an
instance of MetricDescription for centimetres? I have an error on the
defintion of the unit function in the definition of the
MetricDescription instance.
As far as possible I would like to retain the data types and class
structures.
Thanks,
Pat
class (Unit unit) => MetricDescription description unit | description ->
unit where
unit :: description -> unit
valueInUnit :: description -> Double
valueInBaseUnit :: description -> Double
valueInBaseUnit d = (convertFactorToBaseUnit(unit d)) * (valueInUnit d)
data Metre = Metre deriving Show
data Centimetre = Centimetre deriving Show
-- Each member of the Unit class has one operator convertFactorToBaseUnit
-- that takes a measurement unit (say metre) and returns a conversion
factor for that unit of measurement
class Unit unit where
convertFactorToBaseUnit :: unit -> Double
-- An instance for metres, where the convert factor is 1.0
instance Unit Metre where
convertFactorToBaseUnit Metre = 1.0
-- An instance for metres, where the convert factor is 0.1
instance Unit Centimetre where
convertFactorToBaseUnit Centimetre = 0.1
data LengthInMetres = LengthInMetres Double deriving Show
data LengthInCentimetres = LengthInCentimetres Double deriving Show
-- This seems fine
instance MetricDescription LengthInMetres Metre where
valueInUnit (LengthInMetres d) = d
unit l = Metre
-- This is the instance that I cannot get to work
-- The unit 2 function seems to be the problem.
-- instance MetricDescription LengthInCentimetres Centimetre where
-- valueInUnit (LengthInCentimetres d) = d
-- unit 2 = Centimetre
This message has been scanned for content and viruses by the DIT Information Services E-Mail Scanning Service, and is believed to be clean. http://www.dit.ie
More information about the Haskell-Cafe
mailing list