__color__	__group__	ticket	summary	component	version	type	owner	status	created	_changetime	_description	_reporter
4		28	Adds mouse button-up and mouse/keyboard behaviors to reactive-glut	None		enhancement		new	2009-05-18T21:56:07Z+0100	2009-05-18T21:56:07Z+0100	One patch, as ordered.	Baughn
3		31	BehaviorG has no Monad instance	None		defect		new	2010-06-13T11:48:07Z+0100	2010-06-14T22:04:33Z+0100	Despite being documented as Monad BehaviorG have no monad instances.	uzytkownik
3		30	Build fails with QuickCheck 2.1.0.2	None		defect		new	2009-10-10T06:09:42Z+0100	2009-10-10T06:09:42Z+0100	"With QC 2.1.0.2, the ""import Test.QuickCheck.Applicative ()"" is no longer needed, since QC defines its own Applicative instance. That module has been removed from the latest checkers too, so it actually causes the reactive build to fail."	ajd
3		23	Circular integral equation doesn't work	None		defect		new	2009-04-26T02:18:21Z+0100	2009-04-26T02:36:46Z+0100	"I wrote the following small demo. Note the circular relationship between the velocity and acceleration. Conal says this is supposed to work. The program produces the first frame of animation (managing to draw the black background and white disk), but then immediately freezes, and doesn't repaint itself.

{{{
import Control.Applicative
import Data.VectorSpace
import FRP.Reactive
import FRP.Reactive.GLUT.Adapter
import Graphics.FieldTrip
import FRP.Reactive.FieldTrip
import Data.Traversable (sequenceA)

main = anim2 myDisk

myDisk ui = motion . pure $ uscale2 (0.1 :: Double) *% udisk
  where motion = liftA2 (*%) (fmap translate2 (position ui))

position ui = integral (framePass ui) (velocity ui)

velocity ui = integral (framePass ui) (accel ui)

accel ui = liftA2 (^+^) (keyAccel ui) (fmap ((-0.1) *^) (velocity ui))

keyAccel :: Anim (Vector2 Double)
keyAccel ui = accumB zeroV . fmap f $ keyAction ui
  where f (Down, k) = (^+^ keyMotion k)
        f (Up, k)   = (^-^ keyMotion k)

arrowKeys :: UI -> Event (KeyState, Key)
arrowKeys = filterE ((`elem` map SpecialKey [KeyUp, KeyDown, KeyLeft, KeyRight]) . snd) . keyAction

keyMotion (SpecialKey KeyUp)    = vector2 0 1
keyMotion (SpecialKey KeyDown)  = vector2 0 (-1)
keyMotion (SpecialKey KeyLeft)  = vector2 (-1) 0
keyMotion (SpecialKey KeyRight) = vector2 1 0
keyMotion _ = zeroV
}}}

For reference, here's the GHCi log, which includes the version numbers of the packages involved. I got everything from Hackage.
{{{
GHCi, version 6.10.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( ReactiveGame.hs, interpreted )
Ok, modules loaded: Main.
*Main> main
Loading package syb ... linking ... done.
Loading package base-3.0.3.0 ... linking ... done.
Loading package array-0.2.0.0 ... linking ... done.
Loading package containers-0.2.0.0 ... linking ... done.
Loading package old-locale-1.0.0.1 ... linking ... done.
Loading package old-time-1.0.0.1 ... linking ... done.
Loading package random-1.0.0.1 ... linking ... done.
Loading package filepath-1.1.0.1 ... linking ... done.
Loading package unix-2.3.1.0 ... linking ... done.
Loading package directory-1.0.0.2 ... linking ... done.
Loading package process-1.0.1.0 ... linking ... done.
Loading package haskell98 ... linking ... done.
Loading package QuickCheck-1.2.0.0 ... linking ... done.
Loading package mtl-1.1.0.2 ... linking ... done.
Loading package MemoTrie-0.4 ... linking ... done.
Loading package OpenGL-2.2.1.1 ... linking ... done.
Loading package GLUT-2.1.1.2 ... linking ... done.
Loading package graphicsFormats-0.1 ... linking ... done.
Loading package vector-space-0.5 ... linking ... done.
Loading package pretty-1.0.1.0 ... linking ... done.
Loading package Cabal-1.6.0.1 ... linking ... done.
Loading package bytestring-0.9.1.4 ... linking ... done.
Loading package editline-0.2.1.0 ... linking ... done.
Loading package hpc-0.5.0.2 ... linking ... done.
Loading package packedstring-0.1.0.1 ... linking ... done.
Loading package template-haskell ... linking ... done.
Loading package ghc-6.10.1 ... linking ... done.
Loading package category-extras-0.53.5 ... linking ... done.
Loading package lazysmallcheck-0.3 ... linking ... done.
Loading package Stream-0.3 ... linking ... done.
Loading package TypeCompose-0.6.4 ... linking ... done.
Loading package FieldTrip-0.2.1 ... linking ... done.
Loading package checkers-0.1.3 ... linking ... done.
Loading package unamb-0.1.9 ... linking ... done.
Loading package reactive-0.10.5 ... linking ... done.
Loading package reactive-glut-0.1.6 ... linking ... done.
Loading package InfixApplicative-1.0.1 ... linking ... done.
Loading package reactive-fieldtrip-0.0.8 ... linking ... done.
}}}"	cgibbard
3		3	Crash when integral acts on single event	component1		defect	somebody	new	2008-11-13T00:01:39Z+0000	2008-11-14T20:30:32Z+0000	"If you run the following code it will work correctly & run into the already tracked <<loop>> problem with integral.  If you change the events to events' in the main function, it eats up all the RAM & causes a hard lockup. I'm not sure yet if this is related to any known bug. 

import FRP.Reactive[[BR]]
import FRP.Reactive.LegacyAdapters[[BR]]
import Control.Concurrent[[BR]]
import Control.Monad[[BR]]

x :: Event () -> Behavior Double[[BR]]
x e = b where b = integral e b

events :: Event ()[[BR]]
events = atTimes [0.1,0.2]

events' :: Event ()[[BR]]
events' = once events

schedule a = threadDelay 100000 >> a

main = do
 c <- makeClock[[BR]]
 u <- mkUpdater (cGetTime c) (fmap print $  x events)[[BR]]
 forever $ schedule u[[BR]]"	wchogg
3		14	Event -> Behaviour -> Event blocking	None		defect		new	2008-11-30T18:52:05Z+0000	2008-12-06T03:56:10Z+0000		lilac
3		15	Events don't hold monad laws	None		defect		new	2008-12-01T15:12:47Z+0000	2008-12-01T15:12:47Z+0000	"{{{
m :: EventG X String
m = listToEvent [future 1 ""m0""]

f,g :: String -> EventG X String
f = const $ listToEvent [ future 0 ""f0""
                        , future 0 ""f1""
                        ]
g = const $ listToEvent [ future 0 ""g0""
                        , future 1 ""g1""
                        ]

a = (m >>= f) >>= g
-- ((1,m0) >>= f) >>= g
-- [(1,f0), (1,f1)] >>= g
-- [(1,g0), (1,g1), (1,g0), (1,g1)]

b = m >>= (\x -> f x >>= g)
-- m >>= (\x -> f x >>= g)
-- m >>= ([(0,f0), (0,f1)] >>= g)
-- m >>= [(0,g0), (0,g0), (1,g1), (1,g1)]
-- [(1,g0), (1,g0), (1,g1), (1,g1)]
}}}

Beneath a and b is a calculation of the result in the semantic domain. This serves as a counter example of the assertion that joinE as defined in section 2.2.3 of the paper forms a monad with the rest of the things (list equality, fmap, etc.)."	camio
3		10	Export some general class functions from FRP.Reactive	None		enhancement		new	2008-11-21T21:38:33Z+0000	2008-11-21T21:59:52Z+0000	Specifically, join from Monad, mappend and mempty from Monoid, and the liftA* functions from Applicative. Maybe also the infix functions from applicative although I don't use these personally.	camio
3		9	External events leak space when unused	None		defect		new	2008-11-16T22:09:45Z+0000	2008-11-16T22:09:45Z+0000	"There is a space leak with the current implementation of external events.
Each one has an associated channel that gets filled whether or not anyone is listening.
When there are no listeners, the channel just gets filled and not drained.
Perhaps the leak could be eliminated with the help of a weak reference.
Access the channel's read end via a structure than has an unused strong pointer to the channel.
Access its write end via a weak ref.
If the read end becomes inaccesible, then GC will (eventually) make the write end inaccesible, so it will stop getting filled and the existing channel content will get reclaimed.

I think this mechanism can be wrapped up as a reusable abstraction that hides the channel entirely.
"	conal
3		4	Find a way to exploit periodicity of behaviours/time functions	component1		enhancement	somebody	new	2008-11-13T02:26:41Z+0000	2008-11-13T03:48:38Z+0000	"It seems that for purposes of efficiency, it would be appropriate to exploit known periodicity to be able to cache expensive time functions.

In order to do this, you would likely need to be able to fix a time resolution at which the time function was to be sampled, however, there might be a reasonable way to propagate demand for time resolution, similar to how real arithmetic libraries propagate demand for precision (in order to not lose composability)."	cgibbard
3		20	Functor instance for Reactive has an error.	None		defect		new	2008-12-12T13:59:35Z+0000	2008-12-12T13:59:35Z+0000	"The current definition:

{{{
instance Functor (ReactiveG t) where
  fmap f ~(a `Stepper` e) = f a `stepper` fmap f e
}}}

A reduction for `fmap id _|_`.
{{{
fmap id _|_
stepper (id (case _|_ of (Stepper a _) -> a)) (fmap id (case _|_ of (Stepper _ b -> b)))
Stepper (id (case _|_ of (Stepper a _) -> a)) (fmap id (case _|_ of (Stepper _ b -> b)))
Stepper (id _|_) (fmap id (case _|_ of (Stepper _ b -> b)))
Stepper _|_ (fmap id (case _|_ of (Stepper _ b -> b)))
}}}

We use http://www.haskell.org/onlinereport/exps.html#sect3.17.3 for the lazy pattern matching.

In section 6.3.5 we have the law for functors that fmap id = id, so

`fmap id _|_ == Stepper _|_ (fmap id (case _|_ of (Stepper _ b -> b))) /= _|_ == id _|_`

The solution is to remove the ~ from the definition."	camio
3		24	GLUT mouse coordinates do not appear to match 2D graphics coordinates	None		defect		new	2009-04-26T05:18:58Z+0100	2009-04-26T05:18:58Z+0100	"Here is a program in which a disc should follow the mouse cursor. Instead, the coordinate scaling is a little different, so they only meet when the mouse is in the centre of the view. 

{{{
import Control.Applicative
import Data.VectorSpace
import FRP.Reactive
import FRP.Reactive.GLUT.Adapter
import Graphics.FieldTrip
import FRP.Reactive.FieldTrip

main = anim2 myDisk

myDisk ui = motion . pure $ uscale2 (0.1 :: Double) *% udisk
  where motion = liftA2 (*%) (fmap translate2 mouse)
        mouse = fmap (uncurry vector2) (mousePosition ui)
}}}"	cgibbard
3		25	GLUT provides many useful and practical features which are not exposed by the adapter	None		enhancement		new	2009-04-26T05:38:24Z+0100	2009-04-26T05:38:24Z+0100	It would be nice if a larger portion of the features provided by GLUT were accessible in some way to programs using reactive-glut. In particular, it would be nice to have the ability to control the window geometry and title, fullscreen, per-window keyboard repeat setting (which should probably default to being off), and a wider range of events available from the library. Another ticket points out that there's no mouse-up events, but there's also no reporting of a middle mouse button or wheel, and keyboard modifier keys aren't reported.	cgibbard
3		6	Hackage web page for reactive shows markup.	component1		defect	conal	assigned	2008-11-14T14:23:06Z+0000	2008-11-14T21:21:16Z+0000	"When I view the Hackage page for Reactive, I see things like &#169; and other markup.

http://hackage.haskell.org/cgi-bin/hackage-scripts/package/reactive-0.9.0"	camio
3		29	join is broken for events	None		defect		new	2009-10-08T20:54:07Z+0100	2009-10-08T21:32:26Z+0100	"In GHCi:

{{{
Prelude FRP.Reactive.Reactive Control.Monad Control.Applicative> join $ return (empty :: Event ())
Loading package syb ... linking ... done.
Loading package base-3.0.3.1 ... linking ... done.
Loading package array-0.2.0.0 ... linking ... done.
Loading package old-locale-1.0.0.1 ... linking ... done.
Loading package old-time-1.0.0.2 ... linking ... done.
Loading package random-1.0.0.1 ... linking ... done.
Loading package filepath-1.1.0.2 ... linking ... done.
Loading package unix-2.3.2.0 ... linking ... done.
Loading package directory-1.0.0.3 ... linking ... done.
Loading package process-1.0.1.1 ... linking ... done.
Loading package haskell98 ... linking ... done.
Loading package mtl-1.1.0.2 ... linking ... done.
Loading package MemoTrie-0.4.5 ... linking ... done.
Loading package containers-0.2.0.1 ... linking ... done.
Loading package pretty-1.0.1.0 ... linking ... done.
Loading package Cabal-1.6.0.3 ... linking ... done.
Loading package bytestring-0.9.1.4 ... linking ... done.
Loading package hpc-0.5.0.3 ... linking ... done.
Loading package packedstring-0.1.0.1 ... linking ... done.
Loading package template-haskell ... linking ... done.
Loading package ghc-6.10.4 ... linking ... done.
Loading package category-extras-0.53.5 ... linking ... done.
Loading package lazysmallcheck-0.3 ... linking ... done.
Loading package unamb-0.2.2 ... linking ... done.
Loading package vector-space-0.5.7 ... linking ... done.
Loading package QuickCheck-2.1.0.2 ... linking ... done.
Loading package TypeCompose-0.6.7 ... linking ... done.
Loading package checkers-0.2.4 ... linking ... done.
Loading package Stream-0.3.2 ... linking ... done.
Loading package reactive-0.11 ... linking ... done.
Event: *** Exception: BothBottom
}}}

join . return should be equal to id"	greenrd
1		2	joinE not lazy enough	component1		defect	somebody	new	2008-11-11T15:54:01Z+0000	2008-11-11T15:54:01Z+0000	"This is an oldie. It is exemplified in the tutorial with the metronome example. It seems to be one step behind. Looking at the implementation of joinE:
{{{
-- Note, joinE should not be called with an infinite list of events that all
-- occur at the same time.  It can't decide which occurs first.
joinE :: (Ord t) => EventG t (EventG t a) -> EventG t a
joinE (Event (Future (Max MaxBound, _))) = mempty
joinE (Event (Future (t0h, e `Stepper` ((Event (Future (Max MaxBound, _)))))))
  = adjustE t0h e
joinE (Event (Future (t0h, e `Stepper` ee'@((Event (Future (t1h, _)))))))
  = happy (adjustE t0h e) t1h (adjustTopE t0h (joinE ee'))
}}}

we can see how it hast to look two events into the future."	camio
3		18	Mailing list for changes in the main reactive repository	None		enhancement		new	2008-12-03T17:11:03Z+0000	2008-12-03T18:10:17Z+0000	"If there was a mailing list for patches integrated into the main reactive repository, developers could keep tabs on what's going on while away from their development machines. It also opens the opportunity for discussion on the patches themselves, and buys us a nice graphical interface, via. mailman, for the trunk's history.

Doing this would first involve seeing if anything out there that can make this simple."	camio
3		17	"Make a ""Beginner"" priority/milestone/keyword"	None		enhancement		new	2008-12-03T17:02:38Z+0000	2008-12-03T17:02:38Z+0000	"Neil Mitchell, in his article in the Monad Reader issue 12, mentioned that some of the bug listings for Hoogle include a ""Beginner"" tag. This seems like a great way to get people new to the project involved in its development and have immediate success.

The trac system includes ""milestone"" and ""priority"" tags that we could use, but I'm also seeing the ""Keywords:"" thing below which may be best. I think to implement this well, we'd need to:

 * Decide on Using Milestone, Priority, or Keyword with a preference for Keyword.
 * Create a custom report in ""View Tickets"" that displays two graphs, one for beginner incomplete and another for beginner complete.
 * Revamp the front page of the ""trac"" wiki linking to a the beginner ticket list and others with explanations.
 * (If easy enough) Modify the trac templates to note on the ""Create New Ticket"" page that ""beginner"" can be used as a keyword."	camio
3		19	"Make a ""getting involved"" wiki page"	None		enhancement		new	2008-12-03T17:19:12Z+0000	2008-12-03T17:19:12Z+0000	"It would be nice if we have a very beginner-friendly page for getting involved with the reactive community. This change may entice some to join the community who otherwise wouldn't. This sort of relates to #7 and would certainly mention #17 if implemented.

It could walk through questions like:
 * What's too beginnerish of a question to ask on the mailing list (none hopefully!).
 * I found a bug, how do I report it?
 * What are some fun things to do immediately? (Tutorial/play tetris)
 * Which packages do I need to get up and running?
 * Who's the big commercial sponsor of reactive? Anygma!
 * . . ."	camio
3		5	Metronome example doesn't work	component1		defect	somebody	new	2008-11-14T14:19:30Z+0000	2008-11-14T14:20:35Z+0000	"On my machine I get no sound and the following output when I used ""adapt metronome"" with '''ghci EventTut.hs''':
{{{
<interactive>: Future mempty: it'll never happen, buddy
}}}

This code (aside from the legacy adapter) is from David and Conal's Event tutorial here:

http://netsuperbrain.com/blog/posts/introducing-reactive-events/

Sasha Rush and Michael Smith both wrote their own Legacy Adapters using adaptE and gained similar results. I suspect this is somehow related to #2 since I discovered that bug by narrowing down a different program with similar behavior."	camio
4		27	mkUpdater sleeps for constant behaviours	None		defect		new	2009-05-02T06:11:32Z+0100	2009-05-02T13:56:34Z+0100	"I wrote a little sample program:

{{{
main = do
    c <- makeClock
    a <- mkUpdater (cGetTime c) (fmap (const (print ""ping"")) time)
    a
}}}

which, to my dismay, exited without printing ""ping""! I have therefore added a new behaviour and a rewrite rule which allows me to implement my test thusly:

{{{
main = do
    c <- makeClock
    a <- mkUpdater (cGetTime c) (bConst (print ""blah""))
    a
}}}
"	povman
2		8	Problems with filterMP	component1		defect	somebody	new	2008-11-16T16:18:55Z+0000	2008-11-19T17:56:57Z+0000	"This sample code generates rather strange results: 

{{{
import FRP.Reactive as R
import FRP.Reactive.LegacyAdapters
    
import Control.Applicative

import Control.Monad
import Data.Monoid
import Control.Concurrent
import System.IO

main = do
  c <- makeClock 
  (onStanza, snk_onS) <- makeEvent c
  let bred = ((const $ putStrLn "">10"") <$> filterMP (>10) onStanza) `mappend`
             ((const $ putStrLn ""<10"") <$> filterMP (<10) onStanza)
  hSetBuffering stdout NoBuffering
  doSched c connect bred
  mapM (\x -> snk_onS x >> threadDelay 1000) [5..15]
  forever $ threadDelay 1000000000
  return ()

doSched clock init act = do
  updater <- mkUpdater (cGetTime clock) (stepper init act)
  forkIO $ forever $ (updater)
}}}

After displaying: 
{{{
<10
<10
}}} 
everything hangs. Debugging shows that sink and updater are called, but updater does nothing. 

Same code without filterMP works as expected: it displays 20 messages. "	pierre
3		11	Reactive-GLUT does not have reports of unpress events	None		defect		new	2008-11-23T22:09:36Z+0000	2008-11-23T22:09:36Z+0000	"Hopefully this is the right trac for this
"	EyalLotem
3		1	Recursive integration (ODEs) lock up	component1		defect	wchogg	new	2008-11-08T01:59:27Z+0000	2009-10-02T01:23:37Z+0100	Perhaps other self-reactive behaviors as well.  I defined the semantics of reactivity carefully to allow this sort of thing to be meaningful and work.  The problem might be a little over-strictness, or it could be deeper.	conal
3		16	Rename 'mealy' function	None		defect		new	2008-12-01T18:11:34Z+0000	2008-12-01T18:11:34Z+0000	"As [http://www.haskell.org/pipermail/reactive/2008-November/000101.html Robin Green pointed out]


> On Mon, 24 Nov 2008 20:27:34 -0800
> ""Conal Elliott"" <conal@conal.net> wrote:

> > I renamed 'stateE' and 'stateE_' to' mealy' and 'mealy_' in
> > reactive-0.9.4 (just released).  I've been meaning to change these
> > names for a while now. I prefer these new names as being more clear &
> > specific and connecting clearly to automata theory rather than to
> > imperative programming.

> I don't think mealy is as general as a Mealy machine, so this seems
> misleading. A Mealy machine can jump to different states depending on
> its input. If 's' is the state type, and 'b' the input type (which
> seems to me to be the natural way to interpret it), that
> ""conditional jumping"" feature isn't present.

> I think

> \f g a e -> f <$> scanlE g a e

> is precisely a *Moore* machine, though? If so, scanlE is a particular
> kind of Moore machine in which f is the identity. And so are the other
> scanl* functions in the library - right?
> --
> Robin
"	conal
3		22	rhs of a::Event <|> b::Event push-lagging more than its lhs	None		defect		new	2009-01-27T20:36:24Z+0000	2009-01-27T20:36:24Z+0000	"...as exposed in [http://moonpatio.com:8080/fastcgi/hpaste.fcgi/view?id=977]
. That one depends on unreleased and discontinued ffi bindings to [http://libagar], I can provide the source if necessary.

""more"" meaning that even the lhs may lag occasionally, but rarely.

Those Events are produced and consumed by
{{{
type Sync :: Clock TimeT

registerEvent :: Sync -> Object -> String -> (AgarEvent -> IO a) -> IO (Event a)
registerEvent cl o s a = do
    (sink, src) <- makeEvent cl
    setEvent o s (\ev -> forkIO (a ev >>= sink) >> return ())
    return src

makeSink :: (a -> Action) -> Event a -> IO ThreadId
makeSink a = forkIO . adaptE . fmap a
}}}

that is, event handlers spark threads to sink, and output is shoved into agar in another thread than the one running its event loop (that is sparking the threads)."	ksf
3		32	Several failed monotonicity tests for Reactive.PrimReactive	None		defect		new	2011-01-10T21:08:08Z+0000	2011-01-12T22:25:35Z+0000	"There are failed monotonicity tests (located in src/Test.hs) for Reactive.!PrimReactive in version 0.11.5 of reactive.  The failing functions are: withTimeGE, accumE, mappend, mplus, <|>. and fmap.

I am using GHC 6.12.1 on a Fedora 13 x86_64 machine.

The versions of the dependencies are:[[BR]]
base-4.2.0.0[[BR]]
category-extras-0.53.5[[BR]]
checkers-0.2.8[[BR]]
old-time-1.0.0.3[[BR]]
!QuickCheck-2.4.0.1[[BR]]
random-1.0.0.2[[BR]]
Stream-0.4.2[[BR]]
!TypeCompose-0.8.0[[BR]]
unamb-0.2.4[[BR]]
vector-space-0.5.9[[BR]]

I have also run the test on a GHC 7.0.1 Fedora 14 x86_64 machine with the same results."	HackerFoo
3		26	Strange performance behaviour	None		defect		new	2009-04-26T05:57:50Z+0100	2009-04-26T05:57:50Z+0100	"In the following program, velocity is computed as the sum of the integral of an acceleration term derived from keyboard input, and the position of the mouse. If I comment out the liftA2 (^+^) and either one of the two sources of velocity, the performance is smooth. However, taking the sum like this makes the program very jerky and unresponsive. Compiling with optimisations does not appear to help. Is it just my machine?

{{{
import Control.Applicative
import Data.VectorSpace
import FRP.Reactive
import FRP.Reactive.GLUT.Adapter
import Graphics.FieldTrip
import FRP.Reactive.FieldTrip

main = anim2 myDisk

myDisk ui = motion . pure $ uscale2 (0.1 :: Double) *% udisk
  where motion = liftA2 (*%) (fmap translate2 (position ui))

position = uiIntegral velocity

velocity ui = liftA2 (^+^)
                (uiIntegral accel ui)
                (fmap (uncurry vector2) (mousePosition ui))

accel ui = keyAccel ui 

keyAccel :: Anim (Vector2 Double)
keyAccel ui = accumB zeroV . fmap f $ keyAction ui
  where f (Down, k) = (^+^ keyMotion k)
        f (Up, k)   = (^-^ keyMotion k)

keyMotion (SpecialKey KeyUp)    = vector2 0 1
keyMotion (SpecialKey KeyDown)  = vector2 0 (-1)
keyMotion (SpecialKey KeyLeft)  = vector2 (-1) 0
keyMotion (SpecialKey KeyRight) = vector2 1 0
keyMotion _ = zeroV
}}}"	cgibbard
3		7	User Friendly Reactive home page	component1		defect	somebody	new	2008-11-14T14:29:43Z+0000	2008-11-26T21:26:29Z+0000	"In my opinion, the Reactive home page isn't user friendly for those new to FRP. I believe the library could gain a wider user and developer base if it was stated prominently, clearly, and concisely how this library could serve someone who wants to use it. I'd also like to see an emphasis on some easily digestible problems that is solves.

The implementation details (mentions of Improving and Reactive) and history could go on sub-pages for those who are interested."	camio
2		21	Value skipping Behaviour	None		defect		new	2009-01-09T01:46:33Z+0000	2009-01-09T01:46:33Z+0000	"Case01 is the original, Case02 fixes things, Case03 breaks it again, but in a different way (the behaviour is the same as in case 1)

Case 3 shows that this is not necessarily related to snapshot, my bets go on stepper and/or Double as TimeT.

Conal thinks this might be related to http://hackage.haskell.org/trac/ghc/ticket/2558 , let's see."	ksf
