summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_run/tcrun003.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/typecheck/should_run/tcrun003.hs')
-rw-r--r--testsuite/tests/typecheck/should_run/tcrun003.hs27
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")