-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Open Sound Control encode/decode
--   
--   Small, simple, and well-tested implementation of the Open Sound
--   Control message format.
--   
--   Example usage:
--   
--   <pre>
--   &gt;&gt;&gt; :set -XOverloadedStrings
--   
--   &gt;&gt;&gt; msg = OSC "/foo" [OSC_S "bar", OSC_I 9, OSC_F 0.1, OSC_B "this-is-binary"]
--   
--   &gt;&gt;&gt; :t msg
--   &gt; msg :: OSC
--   
--   &gt;&gt;&gt; :t encodeOSC msg
--   &gt; encodeOSC msg :: ByteString
--   
--   &gt;&gt;&gt; decodeOSC (encodeOSC msg) == Right msg
--   &gt; True
--   </pre>
--   
--   Sending it over UDP (e.g. to TidalCycles), using the <a>network</a>
--   package:
--   
--   <pre>
--   {-# LANGUAGE OverloadedStrings #-}
--   </pre>
--   
--   <pre>
--   import Network.Socket
--   import Network.Socket.ByteString as SB
--   
--   import Vivid.OSC
--   
--   main = do
--      -- Boring Network.Socket setup:
--      (a:_) &lt;- getAddrInfo Nothing (Just "127.0.0.1") (Just "57120")
--      s &lt;- socket (addrFamily a) Datagram defaultProtocol
--      connect s (addrAddress a)
--   
--      -- The interesting part:
--      SB.send s $ encodeOSC $
--         OSC "/play2" [OSC_S "cps", OSC_F 1.2, OSC_S "s", OSC_S "bd"]
--   </pre>
@package vivid-osc
@version 0.5.0.0


-- | Open Sound Control data
module Vivid.OSC

-- | An OSC message, e.g.
--   
--   <pre>
--   OSC "/n_free" [OSC_I 42]
--   </pre>
data OSC
OSC :: ByteString -> [OSCDatum] -> OSC
data OSCDatum
OSC_I :: Int32 -> OSCDatum
OSC_S :: ByteString -> OSCDatum
OSC_F :: Float -> OSCDatum

-- | This isn't a base type in the OSC standard but the scsynth response
--   message from "/status" uses it...
OSC_D :: Double -> OSCDatum
OSC_B :: ByteString -> OSCDatum

-- | From the OSC 1.1 spec
OSC_T :: Timestamp -> OSCDatum
encodeOSC :: OSC -> ByteString
decodeOSC :: ByteString -> Either String OSC

-- | This is stored as the number of seconds since Jan 1 1900. You can get
--   it with <a>getTime</a>
data Timestamp
Timestamp :: Double -> Timestamp

-- | TODO: a Bundle can also contain other bundles, recursively
data OSCBundle
OSCBundle :: Timestamp -> [Either ByteString OSC] -> OSCBundle
encodeOSCBundle :: OSCBundle -> ByteString
decodeOSCBundle :: ByteString -> Either String OSCBundle
encodeTimestamp :: Timestamp -> ByteString

-- | <i>Deprecated: renamed to <a>timestampFromUTC</a></i>
utcToTimestamp :: UTCTime -> Timestamp
timestampToUTC :: Timestamp -> UTCTime
timestampFromUTC :: UTCTime -> Timestamp
timestampToPOSIX :: Timestamp -> POSIXTime
timestampFromPOSIX :: POSIXTime -> Timestamp
addSecs :: Timestamp -> Double -> Timestamp
diffTimestamps :: Timestamp -> Timestamp -> Double
encodeOSCDatum :: OSCDatum -> ByteString
putOSC :: OSC -> Put
putOSCString :: ByteString -> Put
putOSCDatum :: OSCDatum -> Put
getOSCString :: Get ByteString
getOSC :: Get OSC
putOSCBlob :: ByteString -> Put
getOSCBlob :: Get ByteString
getOSCTimestamp :: Get Timestamp
putOSCTimestamp :: Timestamp -> Put
putOSCBundle :: OSCBundle -> Put
getOSCBundle :: Get OSCBundle
runGetWithNoLeftover :: Get a -> ByteString -> Either String a
alignTo4' :: Integral i => i -> i
instance GHC.Classes.Eq Vivid.OSC.OSCBundle
instance GHC.Read.Read Vivid.OSC.OSCBundle
instance GHC.Show.Show Vivid.OSC.OSCBundle
instance GHC.Classes.Ord Vivid.OSC.OSC
instance GHC.Classes.Eq Vivid.OSC.OSC
instance GHC.Read.Read Vivid.OSC.OSC
instance GHC.Show.Show Vivid.OSC.OSC
instance GHC.Classes.Ord Vivid.OSC.OSCDatum
instance GHC.Classes.Eq Vivid.OSC.OSCDatum
instance GHC.Read.Read Vivid.OSC.OSCDatum
instance GHC.Show.Show Vivid.OSC.OSCDatum
instance GHC.Classes.Ord Vivid.OSC.Timestamp
instance GHC.Classes.Eq Vivid.OSC.Timestamp
instance GHC.Read.Read Vivid.OSC.Timestamp
instance GHC.Show.Show Vivid.OSC.Timestamp
