diff options
author | David Terei <davidterei@gmail.com> | 2011-07-20 11:09:03 -0700 |
---|---|---|
committer | David Terei <davidterei@gmail.com> | 2011-07-20 11:26:35 -0700 |
commit | 16514f272fb42af6e9c7674a9bd6c9dce369231f (patch) | |
tree | e4f332b45fe65e2a7a2451be5674f887b42bf199 /testsuite/tests/typecheck/should_compile/tc197.hs | |
parent | ebd422aed41048476aa61dd4c520d43becd78682 (diff) | |
download | haskell-16514f272fb42af6e9c7674a9bd6c9dce369231f.tar.gz |
Move tests from tests/ghc-regress/* to just tests/*
Diffstat (limited to 'testsuite/tests/typecheck/should_compile/tc197.hs')
-rw-r--r-- | testsuite/tests/typecheck/should_compile/tc197.hs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/testsuite/tests/typecheck/should_compile/tc197.hs b/testsuite/tests/typecheck/should_compile/tc197.hs new file mode 100644 index 0000000000..40b9aeca7e --- /dev/null +++ b/testsuite/tests/typecheck/should_compile/tc197.hs @@ -0,0 +1,40 @@ +{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, + FlexibleInstances, FlexibleContexts #-} + +-- Another dependency analysis test +-- Notice that 'a' and 'b' are mutually recursive, +-- but have different contexts. +-- +-- This is the program submitted by Robert van Herk [rherk@cs.uu.nl] +-- to motivate the refined dependency analysis. + +module ShouldCompile where +import Data.IORef + +class MyReader r v | r -> v where + myRead :: r -> IO v + +data R v = R (IORef v) +instance MyReader (R v) v where + myRead (R v) = + do v <- readIORef v + return v + + +a :: IO () +a = + do r <- createReader + b r + +b :: MyReader r Int => r -> IO () +b r = + do i <- myRead r + if i > 10 + then a + else putStrLn (show i) + +createReader :: IO (R Int) +createReader = + do ref <- newIORef 0 + return (R ref) + |