TV-0.1.1: src/Interface/TV/Defaults.hs
{-# OPTIONS -fglasgow-exts #-}
----------------------------------------------------------------------
-- |
-- Module : Interface.TV.Defaults
-- Copyright : (c) Conal Elliott 2006
-- License : LGPL
--
-- Maintainer : conal@conal.net
-- Stability : experimental
-- Portability : portable
--
-- Default inputs and outputs
--
-- TODO: Provide @[a]@ instances for DefaultIn and DefaultOut using the
-- trick for Show @[a]@. See "Interface.TV.DefaultsList" for a first
-- attempt.
----------------------------------------------------------------------
module Interface.TV.Defaults
(
-- * Inputs
DefaultIn(..)
-- * Outputs
, DefaultOut(..)
) where
import Interface.TV.Input
import Interface.TV.Output
import Interface.TV.Common
{----------------------------------------------------------
Inputs
----------------------------------------------------------}
-- | Class of types that provide a default input
class DefaultIn a where
-- | The default input for a type
defaultIn :: CInput a
instance DefaultIn Bool where defaultIn = boolIn False
instance DefaultIn Int where defaultIn = readIn 0
instance DefaultIn Double where defaultIn = readIn 0
instance DefaultIn Float where defaultIn = readIn 0
instance DefaultIn String where defaultIn = stringIn
instance (DefaultIn a, DefaultIn b) => DefaultIn (a,b) where
defaultIn = IPair defaultIn defaultIn
{----------------------------------------------------------
Outputs
----------------------------------------------------------}
-- | Class of types that provide a default output
class DefaultOut a where
-- | The default output for a type
defaultOut :: COutput a
instance DefaultOut Bool where defaultOut = boolOut
instance DefaultOut Int where defaultOut = showOut
instance DefaultOut Double where defaultOut = showOut
instance DefaultOut Float where defaultOut = showOut
instance DefaultOut String where defaultOut = stringOut
instance (DefaultOut a, DefaultOut b) => DefaultOut (a,b) where
defaultOut = OPair defaultOut defaultOut
instance (DefaultIn a, DefaultOut b) => DefaultOut (a->b) where
defaultOut = OLambda defaultIn defaultOut