{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Control.Moffy.Samples.Event.Mouse where

import Prelude hiding (repeat)

import Control.Moffy
import Data.Type.Set

data Button = ButtonPrimary | ButtonMiddle | ButtonSecondary deriving (Int -> Button -> ShowS
[Button] -> ShowS
Button -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Button] -> ShowS
$cshowList :: [Button] -> ShowS
show :: Button -> String
$cshow :: Button -> String
showsPrec :: Int -> Button -> ShowS
$cshowsPrec :: Int -> Button -> ShowS
Show, Button -> Button -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Button -> Button -> Bool
$c/= :: Button -> Button -> Bool
== :: Button -> Button -> Bool
$c== :: Button -> Button -> Bool
Eq)

data Down = DownReq deriving (Int -> Down -> ShowS
[Down] -> ShowS
Down -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Down] -> ShowS
$cshowList :: [Down] -> ShowS
show :: Down -> String
$cshow :: Down -> String
showsPrec :: Int -> Down -> ShowS
$cshowsPrec :: Int -> Down -> ShowS
Show, Down -> Down -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Down -> Down -> Bool
$c/= :: Down -> Down -> Bool
== :: Down -> Down -> Bool
$c== :: Down -> Down -> Bool
Eq, Eq Down
Down -> Down -> Bool
Down -> Down -> Ordering
Down -> Down -> Down
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Down -> Down -> Down
$cmin :: Down -> Down -> Down
max :: Down -> Down -> Down
$cmax :: Down -> Down -> Down
>= :: Down -> Down -> Bool
$c>= :: Down -> Down -> Bool
> :: Down -> Down -> Bool
$c> :: Down -> Down -> Bool
<= :: Down -> Down -> Bool
$c<= :: Down -> Down -> Bool
< :: Down -> Down -> Bool
$c< :: Down -> Down -> Bool
compare :: Down -> Down -> Ordering
$ccompare :: Down -> Down -> Ordering
Ord)
numbered [t| Down |]
instance Request Down where data Occurred Down = OccDown Button deriving Int -> Occurred Down -> ShowS
[Occurred Down] -> ShowS
Occurred Down -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Occurred Down] -> ShowS
$cshowList :: [Occurred Down] -> ShowS
show :: Occurred Down -> String
$cshow :: Occurred Down -> String
showsPrec :: Int -> Occurred Down -> ShowS
$cshowsPrec :: Int -> Occurred Down -> ShowS
Show

down :: React s (Singleton Down) Button
down :: forall s. React s (Singleton Down) Button
down = forall e r s. e -> (Occurred e -> r) -> React s (Singleton e) r
await Down
DownReq \(OccDown Button
b) -> Button
b

data Up = UpReq deriving (Int -> Up -> ShowS
[Up] -> ShowS
Up -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Up] -> ShowS
$cshowList :: [Up] -> ShowS
show :: Up -> String
$cshow :: Up -> String
showsPrec :: Int -> Up -> ShowS
$cshowsPrec :: Int -> Up -> ShowS
Show, Up -> Up -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Up -> Up -> Bool
$c/= :: Up -> Up -> Bool
== :: Up -> Up -> Bool
$c== :: Up -> Up -> Bool
Eq, Eq Up
Up -> Up -> Bool
Up -> Up -> Ordering
Up -> Up -> Up
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Up -> Up -> Up
$cmin :: Up -> Up -> Up
max :: Up -> Up -> Up
$cmax :: Up -> Up -> Up
>= :: Up -> Up -> Bool
$c>= :: Up -> Up -> Bool
> :: Up -> Up -> Bool
$c> :: Up -> Up -> Bool
<= :: Up -> Up -> Bool
$c<= :: Up -> Up -> Bool
< :: Up -> Up -> Bool
$c< :: Up -> Up -> Bool
compare :: Up -> Up -> Ordering
$ccompare :: Up -> Up -> Ordering
Ord)
numbered [t| Up |]
instance Request Up where data Occurred Up = OccUp Button deriving Int -> Occurred Up -> ShowS
[Occurred Up] -> ShowS
Occurred Up -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Occurred Up] -> ShowS
$cshowList :: [Occurred Up] -> ShowS
show :: Occurred Up -> String
$cshow :: Occurred Up -> String
showsPrec :: Int -> Occurred Up -> ShowS
$cshowsPrec :: Int -> Occurred Up -> ShowS
Show

up :: React s (Singleton Up) Button
up :: forall s. React s (Singleton Up) Button
up = forall e r s. e -> (Occurred e -> r) -> React s (Singleton e) r
await Up
UpReq \(OccUp Button
b) -> Button
b

data Move = MoveReq deriving (Int -> Move -> ShowS
[Move] -> ShowS
Move -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Move] -> ShowS
$cshowList :: [Move] -> ShowS
show :: Move -> String
$cshow :: Move -> String
showsPrec :: Int -> Move -> ShowS
$cshowsPrec :: Int -> Move -> ShowS
Show, Move -> Move -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Move -> Move -> Bool
$c/= :: Move -> Move -> Bool
== :: Move -> Move -> Bool
$c== :: Move -> Move -> Bool
Eq, Eq Move
Move -> Move -> Bool
Move -> Move -> Ordering
Move -> Move -> Move
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Move -> Move -> Move
$cmin :: Move -> Move -> Move
max :: Move -> Move -> Move
$cmax :: Move -> Move -> Move
>= :: Move -> Move -> Bool
$c>= :: Move -> Move -> Bool
> :: Move -> Move -> Bool
$c> :: Move -> Move -> Bool
<= :: Move -> Move -> Bool
$c<= :: Move -> Move -> Bool
< :: Move -> Move -> Bool
$c< :: Move -> Move -> Bool
compare :: Move -> Move -> Ordering
$ccompare :: Move -> Move -> Ordering
Ord)
numbered [t| Move |]
instance Request Move where data Occurred Move = OccMove Point deriving Int -> Occurred Move -> ShowS
[Occurred Move] -> ShowS
Occurred Move -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Occurred Move] -> ShowS
$cshowList :: [Occurred Move] -> ShowS
show :: Occurred Move -> String
$cshow :: Occurred Move -> String
showsPrec :: Int -> Occurred Move -> ShowS
$cshowsPrec :: Int -> Occurred Move -> ShowS
Show
type Point = (Double, Double)

move :: React s (Singleton Move) Point
move :: forall s. React s (Singleton Move) Point
move = forall e r s. e -> (Occurred e -> r) -> React s (Singleton e) r
await Move
MoveReq \(OccMove Point
p) -> Point
p

position :: Sig s (Singleton Move) Point r
position :: forall s r. Sig s (Singleton Move) Point r
position = forall s (es :: Set (*)) a r. React s es a -> Sig s es a r
repeat forall s. React s (Singleton Move) Point
move

type Events = Move :- Down :- Up :- 'Nil