W{      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  Safe-InferredReal valued variant of . Repeat action until predicate f is  when applied to  result. Repeat action until f does not give  when applied to  result. None)The IEEE byte representation of a float.  Inverse of . *The IEEE byte representation of a double.  Inverse of f64_i64. ATransform a haskell string into a C string (a null suffixed byte  string).  Inverse of . ATransform a haskell string to a pascal string (a length prefixed  byte string).  Inverse of  .      Safe-Inferred, An OSC   is either a  or a . An OSC bundle. An OSC message. AOSC address pattern. This is strictly an ASCII value, but it is ; very common to pattern match on addresses and matching on   requires OverloadedStrings. "Class for translating to and from . There are instances  for the direct  field types.   d_put (1::Int32) == Int32 1  d_put (1::Int64) == Int64 1  d_put (1::Float) == Float 1  d_put (1::Double) == Double 1 5 d_put (C.pack "str") == ASCII_String (C.pack "str") 1 d_put (B.pack [37,37]) == Blob (B.pack [37,37]) - d_put (MIDI 0 0 0 0) == Midi (MIDI 0 0 0 0) 5There are also instances for standard Haskell types.  d_put (1::Int) == Int64 1  d_put (1::Integer) == Int64 1 $The basic elements of OSC messages. -Four-byte midi message. /Type for ASCII strings (strict 8 ). 0#Type enumerating Datum categories. 1NTP( time in real-valued (fractional) form. 29Constant indicating a bundle to be executed immediately. 3-Single character identifier of an OSC datum. 4 as  if + or  ). 0 let d = [Int32 5,Int64 5,Float 5.5,Double 5.5] C in map datum_integral d == [Just (5::Int),Just 5,Nothing,Nothing] 5 as  if +,  ), ',  % or . 8 let d = [Int32 5,Int64 5,Float 5,Double 5,TimeStamp 5] D in Data.Maybe.mapMaybe datum_floating d == replicate 5 (5::Double) 6Type generalised +. ( int32 (1::Int32) == int32 (1::Integer) / d_int32 (int32 (maxBound::Int32)) == maxBound 0 int32 (((2::Int) ^ (64::Int))::Int) == Int32 0 7Type generalised ). ( int64 (1::Int32) == int64 (1::Integer) / d_int64 (int64 (maxBound::Int64)) == maxBound 8Type generalised '. % float (1::Int) == float (1::Double) - floatRange (undefined::Float) == (-125,128) D isInfinite (d_float (float (encodeFloat 1 256 :: Double))) == True 9Type generalised %. ' double (1::Int) == double (1::Double) E double (encodeFloat 1 256 :: Double) == Double 1.157920892373162e77 :# of . 3 string "string" == ASCII_String (C.pack "string") ;Four-tuple variant of   -. ' midi (0,0,0,0) == Midi (MIDI 0 0 0 0) < constructor. It is an  if the   doesn'$t conform to the OSC specification. =2Message argument types are given by a descriptor. > C.unpack (descriptor [Int32 1,Float 1,string "1"]) == ",ifs" >Descriptor tags are comma prefixed. ? constructor. It is an  if the  list is  empty. @   ?. A  <. BThe 1 of   , if the   is a  this is  2. CRetrieve the set of  s from a  . DIf   is a  add 2 timestamp, else . EIf   is a  or a  with an  immediate time & tag and with one element, return the , else . FIs   immediate, ie. a  with timestamp  2, or a plain Message. G Variant of  for  . HDoes  have the specified . IDo any of the s at  have the specified  . JDoes   have the specified , ie.  H or I. KPretty printer for 1! (truncate to 4 decimal places).  timePP (1/3) == "0.3333" LPretty printer for vectors. ! vecPP [1::Int,2,3] == "<1,2,3>" MPretty printer for . B let d = [Int32 1,Float 1.2,string "str",midi (0,0x90,0x40,0x60)] < in map datumPP d == ["1","1.2","\"str\"","<0,144,64,96>"] NPretty printer for . OPretty printer for . PPretty printer for  . Q Variant of . RGiven 0 attempt to parse  at . ) parse_datum 'i' "42" == Just (Int32 42) ) parse_datum 'h' "42" == Just (Int64 42) 3 parse_datum 'f' "3.14159" == Just (Float 3.14159) 4 parse_datum 'd' "3.14159" == Just (Double 3.14159) 0 parse_datum 's' "\"pi\"" == Just (string "pi") ? parse_datum 'b' "[112,105]" == Just (Blob (B.pack [112,105])) > parse_datum 'm' "(0,144,60,90)" == Just (midi (0,144,60,90)) OSC #s can be ordered (time ascending). R  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRH  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRH120/-.+)'%#!,*(&$" 3456789:;<=>?   @ABCDEFGHIJKLMNOPQR5   +)'%#!,*(&$" -./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRNoneSEncode a signed 8-bit integer. T Encode a signed 16-bit integer. U Encode a signed 32-bit integer. V#Encode an unsigned 16-bit integer. W Encode a signed 64-bit integer. X#Encode an unsigned 64-bit integer. Y,Encode a 32-bit IEEE floating point number. Z,Encode a 64-bit IEEE floating point number. [Encode an ASCII string. \Decode a signed 8-bit integer. ] Decode a signed 16-bit integer. ^ Decode a signed 32-bit integer. _#Decode an unsigned 32-bit integer. ` Decode a signed 64-bit integer. a#Decode an unsigned 64-bit integer. b,Decode a 32-bit IEEE floating point number. c,Decode a 64-bit IEEE floating point number. dDecode an ASCII string. eBundle header as a (strict) . f$Bundle header as a lazy ByteString. g?The number of bytes required to align an OSC value to the next  4-byte boundary. . map align [0::Int .. 7] == [0,3,2,1,0,3,2,1] STUVWXYZ[\]^_`abcdefgSTUVWXYZ[\]^_`abcdefgSTUVWXYZ[\]^_`abcdefgSTUVWXYZ[\]^_`abcdefgNonehUnix/Posix. epoch time in real-valued (fractional) form. i,Type for integer (binary) representation of NTP time. j*Convert a real-valued NTP timestamp to an i timestamp. k Convert an i+ timestamp to a real-valued NTP timestamp. l Difference (in seconds) between NTP and UT epochs. - ntp_ut_epoch_diff / (24 * 60 * 60) == 25567 m Convert a h timestamp to an i timestamp. nConvert Unix/Posix to NTP. oConvert NTP to Unix/Posix. pConvert i to Unix/Posix. q!The time at 1970-01-01:00:00:00. rConvert  to Unix/Posix. sRead current real-valued NTP timestamp. + do {ct <- fmap utc_to_ut T.getCurrentTime * ;pt <- fmap realToFrac T.getPOSIXTime % ;print (pt - ct,pt - ct < 1e-5)} tThe u. limit (in seconds). Values larger than this 1 require a different thread delay mechanism, see x. The ( value is the number of microseconds in  maxBound::Int. uBPause current thread for the indicated duration (in seconds), see  t. vType restricted u. w%Pause current thread until the given 1, see  t. x>Sleep current thread for the indicated duration (in seconds). / Divides long sleeps into parts smaller than t. y%Sleep current thread until the given 1. Divides long sleeps  into parts smaller than t. hijklmnopqrstuvwxyhijklmnopqrstuvwxyihjklmnopqrstuvwxyhijklmnopqrstuvwxyNone BIsolate an action to operating within a fixed block of bytes. The E action is required to consume all the bytes that it is isolated to. /Get a 32 bit integer in big-endian byte order. /Get a 64 bit integer in big-endian byte order. Get an aligned OSC string. Get an aligned OSC string. (Get binary data prefixed by byte count. Get an OSC datum.  Get an OSC . Get a sequence of OSC "s, each one headed by its length. <Get a bundle. Fail if bundle header is not found in packet. z Get an OSC  . {-Decode an OSC packet from a lazy ByteString. A let b = B.pack [47,103,95,102,114,101,101,0,44,105,0,0,0,0,0,0] - in decodeOSC b == Message "/g_free" [Int 0] |/Decode an OSC packet from a strict ByteString. z{|z{|z{| z{|None}Builder monoid for an OSC  . ~Encode an OSC . Encode an OSC . Encode an OSC   to a lazy . A let b = L.pack [47,103,95,102,114,101,101,0,44,105,0,0,0,0,0,0] / in encodeOSC (Message "/g_free" [Int 0]) == b 0Encode an Packet packet to a strict ByteString. }~}~}~ }~NoneAn  and  pair over . 6Converting from and to binary packet representations.   .    . E  . D  . Decode an OSC packet. Encode an OSC packet.    NoneDecode an OSC . Decode an OSC . Decode an OSC  . A let b = B.pack [47,103,95,102,114,101,101,0,44,105,0,0,0,0,0,0] 0 in decodePacket b == Message "/g_free" [Int 0]           NoneEncode an OSC . Encode an OSC . Encode an OSC  .   Safe-Inferred Type specialised . 7 map datum_int32 [Int32 1,Float 1] == [Just 1,Nothing] Type specialised . Type specialised . Type specialised . Type specialised . A datum_ascii (d_put (C.pack "string")) == Just (C.pack "string")  of . 9 datum_string (d_put (C.pack "string")) == Just "string" Type specialised .  variant of  . Type specialised .  as sequence of  if #, ! or . D let d = [string "5",Blob (B.pack [53]),midi (0x00,0x90,0x40,0x60)] F in Data.Maybe.mapMaybe datum_sequence d == [[53],[53],[0,144,64,96]]  Safe-InferredLift + to ) and ' to %. = map normalise_datum [Int32 1,Float 1] == [Int64 1,Double 1]  A normalised  has only ) and %  numerical values. ( let m = message "/m" [Int32 0,Float 0] ; in normalise_message m == message "/m" [Int64 0,Double 0]  A normalised  has only ) and %  numerical values. 0Map a normalising function over datum at an OSC . 0Map a normalising function over datum at an OSC . Coerce +, ) and  to . < map datum_promote [Int32 5,Float 5] == [Double 5,Double 5]  as ) if +, ), ' or  %. ; let d = [Int32 5,Int64 5,Float 5.5,Double 5.5,string "5"] F in map datum_floor d == [Int64 5,Int64 5,Int64 5,Int64 5,string "5"]  None?A type-class for values that can be translated to and from OSC   s.   .   . Translation to  . Translation from  . None1Abstract over the underlying transport protocol. Encode and send an OSC packet. "Receive and decode an OSC packet. Close an existing connection. Bracket OSC communication. Type restricted synonym for . Type restricted synonym for .  Variant of  that runs .  Variant of  that runs D.  Variant of  that runs E.  Variant of  that runs C.  Variant of  that implements an n second timeout.  Wait for a  ! where the supplied predicate is , ! discarding intervening packets.  Wait for a  + where the supplied function does not give  ", discarding intervening packets.  F.  E, ie. an incoming  or  immediate mode  with one element. A  for variant using J to match on  the  of incoming Packets.  Variant on  that returns matching .  Variant of  that runs . None$The UDP transport handle data type. 7Return the port number associated with the UDP socket. "Create and initialise UDP socket. Make a  connection. # let t = openUDP "127.0.0.1" 57110 4 in withTransport t (\fd -> recvT 0.5 fd >>= print) Trivial  server socket.   import Control.Concurrent  0 let {f fd = forever (recvMessage fd >>= print) ' ;t = udpServer "127.0.0.1" 57300} & in void (forkIO (withTransport t f)) # let t = openUDP "127.0.0.1" 57300 > in withTransport t (\fd -> sendMessage fd (message "/n" [])) +Send variant to send to specified address. 0Recv variant to collect message source address.  None$The TCP transport handle data type. Make a  connection.  A trivial  OSC server. NoneTransport connection.  is  with a  constraint.  is the union of  and . Receiver monad. "Receive and decode an OSC packet. Sender monad. Encode and send an OSC packet. *Bracket Open Sound Control communication. Type restricted synonym for . Type restricted synonym for .  Variant of  that runs .  Variant of  that runs D.  Variant of  that runs E.  Variant of  that runs C.  Wait for a  ! where the supplied predicate is , ! discarding intervening packets.  Wait for a  + where the supplied function does not give  ", discarding intervening packets.  F.  E, ie. an incoming  or  immediate mode  with one element. A  for variant using J to match on  the  of incoming Packets.  Variant on  that returns matching .  Variant of  that runs .  !" !"None{  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRhijklmnopqrstuvwxyNone  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRhijklmnopqrstuvwxyNone  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR#hijklmnopqrstuvwxy$ !"#$%%&'(()*+,-./0123456789:;<=>?@@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 :8    !"#$%&'("#)* hosc-0.14Sound.OSC.WaitSound.OSC.Coding.CastSound.OSC.TypeSound.OSC.Coding.ByteSound.OSC.TimeSound.OSC.Coding.Decode.BinarySound.OSC.Coding.Encode.BuilderSound.OSC.CodingSound.OSC.Coding.Decode.BaseSound.OSC.Coding.Encode.BaseSound.OSC.DatumSound.OSC.NormaliseSound.OSC.ClassSound.OSC.Transport.FDSound.OSC.Transport.FD.UDPSound.OSC.Transport.FD.TCPSound.OSC.Transport.MonadSound.OSC.Core Sound.OSC.FD Sound.OSC timeout_runtilPredicate untilMaybef32_w32w32_f32f64_w64w64_f64str_cstrcstr_strstr_pstrpstr_strPacket Packet_Bundle packetBundlePacket_Message packetMessageBundle bundleTimebundleMessagesMessagemessageAddress messageDatumAddress_PatternDatemd_putd_getDatumMidid_midi TimeStamp d_timestampBlobd_blob ASCII_Stringd_ascii_stringDoubled_doubleFloatd_floatInt64d_int64Int32d_int32MIDIASCII Datum_TypeTime immediately datum_tagdatum_integraldatum_floatingint32int64floatdoublestringmidimessage descriptordescriptor_tagsbundlep_bundle p_message packetTimepacketMessagespacket_to_bundlepacket_to_messagepacket_is_immediate at_packetmessage_has_addressbundle_has_addresspacket_has_addresstimePPvecPPdatumPP messagePPbundlePPpacketPP readMaybe parse_datum encode_i8 encode_i16 encode_i32 encode_u32 encode_i64 encode_u64 encode_f32 encode_f64 encode_str decode_i8 decode_i16 decode_i32 decode_u32 decode_i64 decode_u64 decode_f32 decode_f64 decode_strbundleHeader_strict bundleHeaderalignUTNTPi ntpr_to_ntpi ntpi_to_ntprntp_ut_epoch_diff ut_to_ntpi ut_to_ntpr ntpr_to_ut ntpi_to_utut_epoch utc_to_uttimepauseThreadLimit pauseThreadwaitpauseThreadUntil sleepThreadsleepThreadUntil getPacket decodePacketdecodePacket_strict build_packet encodeMessage encodeBundle encodePacketencodePacket_strictCoderCoding decodeMessage decodeBundle datum_int32 datum_int64 datum_float datum_double datum_ascii datum_string datum_blobdatum_timestamp datum_mididatum_sequencenormalise_datumnormalise_messagenormalise_bundlemessage_coerce bundle_coerce datum_promote datum_floorOSCtoPacket fromPacket encodeOSC decodeOSC TransportsendOSC recvPacketclose withTransport sendMessage sendBundlerecvOSC recvBundle recvMessage recvMessagesrecvPacketTimeout waitUntilwaitFor waitImmediate waitMessage waitAddress waitReply waitDatumUDP udpSocketudpPort udp_socketopenUDP udpServersendTorecvFromTCP tcpHandleopenTCP tcpServer' Connection DuplexOSCRecvOSCSendOSCbaseSystem.Timeouttimeoutghc-prim GHC.TypesTrue Data.MaybeNothingbytestring-0.10.0.2Data.ByteString.Internal ByteStringCharGHC.RealIntegral GHC.FloatFloatingData.ByteString.Char8packGHC.Base.GHC.Errerrorid Data.Eithereither Text.ReadreadString $fOrdBundle $fDatemMIDI$fDatemByteString$fDatemByteString0 $fDatemDouble $fDatemFloat$fDatemInteger $fDatemInt $fDatemInt64 $fDatemInt32 time-1.4.0.1Data.Time.Clock.UTCUTCTimeisolate getInt32be getInt64be get_string get_ascii get_bytes get_datum get_messageget_message_seq get_bundleData.ByteString.Lazy.Internalpadding build_ascii build_string build_bytes build_datum build_messagebuild_bundle_ntpi $fCoding[]$fCodingByteString$fCodingByteString0sizestorage decode_datumdecode_datum_seqdecode_message_seqb_takeb_dropextend encode_datumencode_message_blobunpackMaybeGHC.WordWord8 $fOSCPacket $fOSCBundle $fOSCMessage$fTransportUDP$fTransportTCPtransformers-0.3.0.0Control.Monad.IO.ClassMonadIO$fTransportReaderT$fDuplexOSCReaderT$fRecvOSCReaderT$fSendOSCReaderTliftIO