-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Experiemental library for composable interactive programs -- -- Experiemental library for composable interactive programs. GLUT -- backend included. @package peakachu @version 0.2 -- | In/with newtype functions generation with Template Haskell. -- -- Example: -- --
-- {-# LANGUAGE TemplateHaskell #-}
-- import Control.Applicative (Applicative(..), ZipList(..))
-- import Data.Newtype (mkWithNewTypeFuncs)
--
-- $(mkWithNewtypeFuncs [2] ''ZipList)
--
-- > withZipList2 (<*>) [(+3), (*3)] [6, 7]
-- [9, 21]
--
module Data.Newtype
mkInNewtypeFuncs :: [Int] -> Name -> Q [Dec]
mkWithNewtypeFuncs :: [Int] -> Name -> Q [Dec]
-- | In/with functions for bijective functions
--
-- Example:
--
-- -- import Data.Bijection (Bijection(..), bimap) -- import Data.Bijection.YC (withBi2) -- import Data.Monoid (Monoid(..), Sum(..)) -- -- biSum :: Num a => Bijection (->) a (Sum a) -- biSum = Bi Sum getSum -- -- > withBi2 (bimap biSum) mappend (Just 5) (Just 7) -- Just 12 -- -- > withBi2 (bimap biSum) mappend Nothing (Just 7) -- Just 7 --module Data.Bijection.YC withBi :: (Arrow x) => Bijection x a b -> x b b -> x a a inBi2 :: Bijection (->) a b -> (a -> a -> a) -> b -> b -> b withBi2 :: Bijection (->) a b -> (b -> b -> b) -> a -> a -> a -- | ADT getters generation with Template Haskell -- -- Example: -- --
-- {-# LANGUAGE TemplateHaskell #-}
-- data Blah a = NoBlah | YesBlah a | ManyBlah a Int
-- $(mkADTGetters ''Blah)
--
--
-- Generates
--
-- -- gNoBlah :: Blah a -> Maybe () -- gYesBlah :: Blah a -> Maybe a -- gManyBlah :: Blah a -> Maybe (a, Int) ---- -- Where -- --
-- gYesBlah (YesBlah a) = Just a -- gYesBlah _ = Nothing ---- -- etc. module Data.ADT.Getters mkADTGetters :: Name -> Q [Dec] -- | A FilterCategory is a Category that supports mapMaybeC. -- -- In Peakachu, both Program and Backend are instances of FilterCategory. module Control.FilterCategory class (Category cat) => FilterCategory cat flattenC :: (FilterCategory cat) => cat [a] a arrC :: (FilterCategory cat) => (a -> b) -> cat a b genericFlattenC :: (FilterCategory cat, Foldable f) => cat (f a) a mapMaybeC :: (FilterCategory cat) => (a -> Maybe b) -> cat a b filterC :: (FilterCategory cat) => (a -> Bool) -> cat a a module Control.Concurrent.MVar.YC modifyMVarPure :: MVar a -> (a -> a) -> IO () writeMVar :: MVar a -> a -> IO () -- | ADT getter functions for GLUT data types. -- -- Useful for filtering GLUT events in the Maybe monad. module FRP.Peakachu.Backend.GLUT.Getters gChar :: Key -> Maybe Char gMouseButton :: Key -> Maybe MouseButton gSpecialKey :: Key -> Maybe SpecialKey gDown :: KeyState -> Maybe () gUp :: KeyState -> Maybe () module FRP.Peakachu.Backend newtype Backend progToBack backToProg Backend :: ((backToProg -> IO ()) -> IO (Sink progToBack)) -> Backend progToBack backToProg runBackend :: Backend progToBack backToProg -> (backToProg -> IO ()) -> IO (Sink progToBack) data Sink a Sink :: (a -> IO ()) -> IO () -> Maybe (IO ()) -> IO () -> Sink a sinkConsume :: Sink a -> a -> IO () sinkInit :: Sink a -> IO () sinkMainLoop :: Sink a -> Maybe (IO ()) sinkQuitLoop :: Sink a -> IO () instance FilterCategory Backend instance Category Backend instance Functor (Backend p2b) instance Monoid (Backend p2b b2p) instance Monoid (Sink a) module FRP.Peakachu.Backend.File data FileToProgram a FileData :: String -> a -> FileToProgram a FileError :: a -> FileToProgram a data ProgramToFile a ReadFile :: FilePath -> a -> ProgramToFile a WriteFile :: FilePath -> String -> a -> ProgramToFile a fileB :: Backend (ProgramToFile a) (FileToProgram a) gFileData :: FileToProgram a[a78P] -> Maybe (String, a[a78P]) gFileError :: FileToProgram a[a78P] -> Maybe a[a78P] module FRP.Peakachu.Backend.GLUT data GlutToProgram a IdleEvent :: GlutToProgram a TimerEvent :: a -> GlutToProgram a MouseMotionEvent :: GLfloat -> GLfloat -> GlutToProgram a KeyboardMouseEvent :: Key -> KeyState -> Modifiers -> Position -> GlutToProgram a data Image Image :: IO () -> Image runImage :: Image -> IO () data ProgramToGlut a DrawImage :: Image -> ProgramToGlut a SetTimer :: Timeout -> a -> ProgramToGlut a glut :: Backend (ProgramToGlut a) (GlutToProgram a) gIdleEvent :: GlutToProgram a[a7WX] -> Maybe () gTimerEvent :: GlutToProgram a[a7WX] -> Maybe a[a7WX] gMouseMotionEvent :: GlutToProgram a[a7WX] -> Maybe (GLfloat, GLfloat) gKeyboardMouseEvent :: GlutToProgram a[a7WX] -> Maybe (Key, KeyState, Modifiers, Position) instance Monoid Image -- | A Peakachu backend to write output to the console module FRP.Peakachu.Backend.StdIO stdoutB :: Backend String () -- | A Peakachu backend to get the time module FRP.Peakachu.Backend.Time getTimeB :: Backend a (UTCTime, a) module FRP.Peakachu.Program data Program a b Program :: [b] -> Maybe (a -> Program a b) -> Program a b progVals :: Program a b -> [b] progMore :: Program a b -> Maybe (a -> Program a b) newtype MergeProgram a b MergeProg :: Program a b -> MergeProgram a b runMergeProg :: MergeProgram a b -> Program a b newtype AppendProgram a b AppendProg :: Program a b -> AppendProgram a b runAppendProg :: AppendProgram a b -> Program a b class (FilterCategory prog) => ProgCat prog scanlP :: (ProgCat prog) => (b -> a -> b) -> b -> prog a b emptyP :: (ProgCat prog) => prog a b takeWhileP :: (ProgCat prog) => (a -> Bool) -> prog a a loopbackP :: (ProgCat prog) => prog a (Either a b) -> prog a b singleValueP :: (ProgCat prog) => prog a () lstP :: (ProgCat prog) => (a -> Maybe b) -> prog a b lstPs :: (ProgCat prog) => Maybe b -> (a -> Maybe b) -> prog a b delayP :: (Integral i, ProgCat prog) => i -> prog a a instance Applicative (AppendProgram a) instance MonadPlus (AppendProgram a) instance Monad (AppendProgram a) instance Monoid (AppendProgram a b) instance Category AppendProgram instance FilterCategory AppendProgram instance Functor (AppendProgram a) instance ProgCat AppendProgram instance Applicative (MergeProgram a) instance Monoid (MergeProgram a b) instance Category MergeProgram instance FilterCategory MergeProgram instance Functor (MergeProgram a) instance ProgCat MergeProgram instance ProgCat Program instance FilterCategory Program instance Functor (Program a) instance Category Program module FRP.Peakachu runProgram :: Backend o i -> Program i o -> IO ()