module Units where
data Units a = U Double deriving Eq
units :: Double -> a -> Units a
units value _ = U value
data Meters
data Yards
meters = undefined :: Meters
yards = undefined :: Yards
instance Show Meters where
show _ = "meters"
instance Show Yards where
show _ = "yards"
extractA :: Units a -> a
extractA = undefined
instance Show a => Show (Units a) where
show u@(U value) = show value ++ " " ++ show $ extractA u
main = (print $ units 5 yards) >> (print $ units 5 meters)
Is it possible to use something instead extractA function here? For example, substitute "extractA u” with “undefined :: a”?
GHC disallows it, so is there a way to explain that I only need a token with type a?