blob: da9b773f28d9c25556a23c209017441a519fc037 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
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
|