[Haskell-cafe] Re: Is there anyone out there who can translate C#
generics into Haskell?
Don Stewart
dons at galois.com
Tue Jan 8 14:28:46 EST 2008
jules:
> Achim Schneider wrote:
> >things like
> >
> >
> >data State = State
> > { winSize :: IORef Size
> > , t :: IORef Int
> > , fps :: IORef Float
> > , showFPS :: IORef Bool
> > , showHelp :: IORef Bool
> > , grabMouse :: IORef Bool
> > , mousePos :: IORef (Maybe Position)
> > , mouseDelta :: IORef Position
> > , viewRot :: IORef Vec3
> > , angle' :: IORef GLfloat
> > , ballPos :: IORef Vec2
> > , ballVel :: IORef Vec2
> > }
>
>
> Yuck!
>
> I'm not sure whether this is a real example or not, but if it's real,
> get rid of all those IORefs. Make State a simple type, and use (IORef
> State) as needed for callbacks, and hide that fact in other code.
I agree, this is very-unHaskelly :)
The State type should be a simple purely functional structured, threaded
through your code via a StateT or some such. Not a bunch of pointers
in IO.
See xmonad for examples of this in highly effectful programs,
http://code.haskell.org/xmonad/XMonad/Core.hs
newtype X a = X (ReaderT XConf (StateT XState IO) a)
(Carries read-only and updatable state components)
-- Don
More information about the Haskell-Cafe
mailing list