@@ -57,6 +57,7 @@ module Graphics.Rendering.OpenGL.GL.StateVar (
57
57
($~) , ($=!) , ($~!)
58
58
) where
59
59
60
+ import Control.Applicative ( Applicative (.. ) )
60
61
import Data.IORef ( IORef , readIORef , writeIORef )
61
62
62
63
--------------------------------------------------------------------------------
@@ -83,6 +84,14 @@ instance HasGetter GettableStateVar where
83
84
instance Functor GettableStateVar where
84
85
fmap f (GettableStateVar g) = GettableStateVar (fmap f g)
85
86
87
+ instance Applicative GettableStateVar where
88
+ pure = GettableStateVar . pure
89
+ GettableStateVar g <*> GettableStateVar h = GettableStateVar (g <*> h)
90
+
91
+ instance Monad GettableStateVar where
92
+ return = pure
93
+ GettableStateVar g >>= h = GettableStateVar (g >>= get . h)
94
+
86
95
-- | Construct a 'GettableStateVar' from an IO action.
87
96
makeGettableStateVar :: IO a -> GettableStateVar a
88
97
makeGettableStateVar = GettableStateVar
@@ -104,6 +113,9 @@ newtype SettableStateVar a = SettableStateVar (a -> IO ())
104
113
instance HasSetter SettableStateVar where
105
114
($=) (SettableStateVar s) a = s a
106
115
116
+ -- instance Contravariant SettableStateVar where
117
+ -- contramap f (SettableStateVar s) = SettableStateVar (s . f)
118
+
107
119
-- | Construct a 'SettableStateVar' from an IO action.
108
120
makeSettableStateVar :: (a -> IO () ) -> SettableStateVar a
109
121
makeSettableStateVar = SettableStateVar
0 commit comments