summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_compile/Tc170_Aux.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/typecheck/should_compile/Tc170_Aux.hs')
-rw-r--r--testsuite/tests/typecheck/should_compile/Tc170_Aux.hs24
1 files changed, 24 insertions, 0 deletions
diff --git a/testsuite/tests/typecheck/should_compile/Tc170_Aux.hs b/testsuite/tests/typecheck/should_compile/Tc170_Aux.hs
new file mode 100644
index 0000000000..c7cd186f13
--- /dev/null
+++ b/testsuite/tests/typecheck/should_compile/Tc170_Aux.hs
@@ -0,0 +1,24 @@
+
+module Tc170_Aux where
+
+class ReadMode mode
+
+data Attr m w a = Attr (w -> IO a) (w -> a -> IO ())
+
+mapAttr :: ReadMode m => (a -> b) -> (a -> b -> a) -> Attr m w a -> Attr m w b
+mapAttr get set (Attr getter setter)
+ = Attr (\w -> do a <- getter w; return (get a))
+ (\w b -> do a <- getter w; setter w (set a b))
+
+
+data Rect = Rect
+data Point = Point
+topLeft = undefined
+rectMoveTo = undefined
+
+class Dimensions w where
+ frame :: ReadMode m => Attr m w Rect
+
+ position :: ReadMode m => Attr m w Point
+ position = mapAttr (\f -> topLeft f) (\f p -> rectMoveTo p f) frame
+