{-# 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