diff options
Diffstat (limited to 'testsuite/tests/typecheck/should_run/tcrun003.hs')
-rw-r--r-- | testsuite/tests/typecheck/should_run/tcrun003.hs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/testsuite/tests/typecheck/should_run/tcrun003.hs b/testsuite/tests/typecheck/should_run/tcrun003.hs new file mode 100644 index 0000000000..67b9771d5f --- /dev/null +++ b/testsuite/tests/typecheck/should_run/tcrun003.hs @@ -0,0 +1,27 @@ +{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-} +-- !!! One method class from Sergey Mechveliani +-- showed up problematic newtype dict rep. +module Main where +import Data.Ratio + +class MBConvertible a b where cm :: a -> b -> Maybe b + +c :: MBConvertible a b => a -> b -> b +c a b = case cm a b + of + Just b' -> b' + _ -> error "c a b failed" + + +instance MBConvertible Int Int where cm a _ = Just a + +instance (MBConvertible a b,Integral b) => MBConvertible a (Ratio b) + where + cm a f = case cm a (numerator f) of Just a' -> Just (a'%1) + _ -> Nothing + +main = let f = 1%1 :: Ratio Int + n2 = 2::Int + g = (c n2 f) + f + in + putStr (shows g "\n") |