<      !"#$%&'()*+,-./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.LTransform a haskell string into a C string (a null suffixed byte string). Inverse of . QTransform a haskell string to a pascal string (a length prefixed byte string).  Inverse of  .     Safe-Inferred0 5Perhaps a precision value for floating point numbers. An OSC   is either a  or a .An OSC bundle.An OSC message.}OSC 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 d_put (C.pack "str") == ASCII_String (C.pack "str") d_put (B.pack [37,37]) == Blob (B.pack [37,37]) d_put (MIDI 0 0 0 0) == Midi (MIDI 0 0 0 0)4There are also instances for standard Haskell types. 7d_put (1::Int) == Int64 1 d_put (1::Integer) == Int64 1#The basic elements of OSC messages..Four-byte midi message.0Type for ASCII strings (strict 8 ).1"Type enumerating Datum categories.2NTP' time in real-valued (fractional) form.38Constant indicating a bundle to be executed immediately.4Type-specialised .5Type-specialised .6,Single character identifier of an OSC datum.7 as  if , or *. plet d = [Int32 5,Int64 5,Float 5.5,Double 5.5] in map datum_integral d == [Just (5::Int),Just 5,Nothing,Nothing]8 as  if ,, *, (, & or  . ylet d = [Int32 5,Int64 5,Float 5,Double 5,TimeStamp 5] in Data.Maybe.mapMaybe datum_floating d == replicate 5 (5::Double)9Type generalised ,. int32 (1::Int32) == int32 (1::Integer) d_int32 (int32 (maxBound::Int32)) == maxBound int32 (((2::Int) ^ (64::Int))::Int) == Int32 0:Type generalised *. Tint64 (1::Int32) == int64 (1::Integer) d_int64 (int64 (maxBound::Int64)) == maxBound;Type generalised (. float (1::Int) == float (1::Double) floatRange (undefined::Float) == (-125,128) isInfinite (d_float (float (encodeFloat 1 256 :: Double))) == True<Type generalised &. idouble (1::Int) == double (1::Double) double (encodeFloat 1 256 :: Double) == Double 1.157920892373162e77=$ of . 1string "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.@1Message argument types are given by a descriptor. <C.unpack (descriptor [Int32 1,Float 1,string "1"]) == ",ifs"ADescriptor tags are comma prefixed.B constructor. It is an  if the  list is empty.C   B.D  ?.EThe 2 of   , if the   is a  this is 3.FRetrieve the set of  s from a  .GIf   is a  add 3 timestamp, else .HIf   is a  or a  with an  immediate, time tag and with one element, return the , else .IIs   immediate, ie. a  with timestamp 3, or a plain Message.J Variant of  for  .KDoes  have the specified .LDo any of the s at  have the specified .MDoes   have the specified , ie. K or L.N Variant of  that deletes trailing zeros. 1map (floatPP (Just 4)) [1,pi] == ["1.0","3.1416"]OPretty printer for 2. !timePP (Just 4) (1/3) == "0.3333"PPretty printer for vectors. vecPP [1::Int,2,3] == "<1,2,3>"QPretty printer for . {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>"]RPretty printer for .SPretty printer for .TPretty printer for  .U Variant of .VGiven 1 attempt to parse  at . ^parse_datum 'i' "42" == Just (Int32 42) parse_datum 'h' "42" == Just (Int64 42) parse_datum 'f' "3.14159" == Just (Float 3.14159) parse_datum 'd' "3.14159" == Just (Double 3.14159) 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))WOSC "s can be ordered (time ascending).V  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`L  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVV231045./,*(&$" -+)'%#!678`_^]\[ZYX9:;<=>?@AWB  CDEFGHIJKLM NOPQRSTUV9  ,*(&$" -+)'%#!./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`NoneaEncode a signed 8-bit integer.b"Encode an un-signed 8-bit integer.cEncode a signed 16-bit integer.dEncode a signed 32-bit integer.e"Encode an unsigned 16-bit integer.fEncode a signed 64-bit integer.g"Encode an unsigned 64-bit integer.h+Encode a 32-bit IEEE floating point number.i+Encode a 64-bit IEEE floating point number.jEncode an ASCII string.k"Decode an un-signed 8-bit integer.lDecode a signed 8-bit integer.mDecode a signed 16-bit integer.nDecode a signed 32-bit integer.o"Decode an unsigned 32-bit integer.pDecode a signed 64-bit integer.q"Decode an unsigned 64-bit integer.r+Decode a 32-bit IEEE floating point number.s+Decode a 64-bit IEEE floating point number.tDecode an ASCII string.uBundle header as a (strict) .v#Bundle header as a lazy ByteString.wRThe 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]abcdefghijklmnopqrstuvwabcdefghijklmnopqrstuvwabcdefghijklmnopqrstuvwabcdefghijklmnopqrstuvw Safe-Inferredx Unix/Posix- epoch time in real-valued (fractional) form.y,Type for integer (binary) representation of NTP time.z*Convert a real-valued NTP timestamp to an y timestamp.{ Convert an y* timestamp to a real-valued NTP timestamp.| Difference (in seconds) between NTP and UT epochs. +ntp_ut_epoch_diff / (24 * 60 * 60) == 25567} Convert a x timestamp to an y timestamp.~Convert  Unix/Posix to NTP.Convert NTP to  Unix/Posix.Convert y to  Unix/Posix. The time at 1970-01-01:00:00:00.Convert  to  Unix/Posix.Read current real-valued NTP timestamp. vdo {ct <- fmap utc_to_ut T.getCurrentTime ;pt <- fmap realToFrac T.getPOSIXTime ;print (pt - ct,pt - ct < 1e-5)}The _ limit (in seconds). Values larger than this require a different thread delay mechanism, see /. The value is the number of microseconds in  maxBound::Int.EPause current thread for the indicated duration (in seconds), see .Type restricted .%Pause current thread until the given 2, see .mSleep current thread for the indicated duration (in seconds). Divides long sleeps into parts smaller than .%Sleep current thread until the given 20. Divides long sleeps into parts smaller than .xyz{|}~xyz{|}~yxz{|}~xyz{|}~None  .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. Get an OSC  .,Decode an OSC packet from a lazy ByteString. klet 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.            NoneBuilder monoid for an OSC  .Encode an OSC .Encode an OSC .Encode an OSC   to a lazy . mlet 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/Encode an Packet packet to a strict ByteString.  None24An  and  pair over .5Converting from and to binary packet representations.  .   .H  .G  . Decode an OSC packet.Encode an OSC packet.  NoneDecode an OSC .Decode an OSC .Decode an OSC  . nlet b = B.pack [47,103,95,102,114,101,101,0,44,105,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 . 5map datum_int32 [Int32 1,Float 1] == [Just 1,Nothing]Type specialised .Type specialised .Type specialised .Type specialised . ?datum_ascii (d_put (C.pack "string")) == Just (C.pack "string") of . }datum_string (d_put (C.pack "string")) == Just "string" map datum_string [string "string",Int32 5] == [Just "string",Nothing]Type specialised .$ variant of !.Type specialised . as sequence of % if $, " or . let d = [string "5",Blob (B.pack [53]),midi (0x00,0x90,0x40,0x60)] 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"] 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  .None0Abstract 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 G. Variant of  that runs H. Variant of  that runs F. 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. I. H, ie. an incoming  or immediate mode  with one element.A  for variant using M to match on the  of incoming Packets. Variant on  that returns matching . Variant of  that runs .None#The UDP transport handle data type.6Return the port number associated with the UDP socket.!Create and initialise UDP socket.Make a  connection. Tlet t = openUDP "127.0.0.1" 57110 in withTransport t (\fd -> recvT 0.5 fd >>= print)Trivial  server socket. import Control.Concurrent ylet {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./Recv 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 G. Variant of  that runs H. Variant of  that runs F. Wait for a  ! where the supplied predicate is ", discarding intervening packets. Wait for a  , where the supplied function does not give !, discarding intervening packets. I. H, ie. an incoming  or immediate mode  with one element.A  for variant using M to match on the  of incoming Packets. Variant on  that returns matching . Variant of  that runs .None  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVxyz{|}~None  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVxyz{|}~None)(  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVxyz{|}~* !"#$%&&'())*+,-./0123456789:;<=>?@AABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         ! " # $ % & ' ( )*+,;9-./-.01 hosc-0.15Sound.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_str FP_PrecisionPacket 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 immediatelyasciiascii_to_string datum_tagdatum_integraldatum_floatingint32int64floatdoublestringmidimessage descriptordescriptor_tagsbundlep_bundle p_message packetTimepacketMessagespacket_to_bundlepacket_to_messagepacket_is_immediate at_packetmessage_has_addressbundle_has_addresspacket_has_addressfloatPPtimePPvecPPdatumPP messagePPbundlePPpacketPP readMaybe parse_datum $fOrdBundle $fDatemMIDI$fDatemByteString$fDatemByteString0 $fDatemDouble $fDatemFloat$fDatemInteger $fDatemInt $fDatemInt64 $fDatemInt32 encode_i8 encode_u8 encode_i16 encode_i32 encode_u32 encode_i64 encode_u64 encode_f32 encode_f64 encode_str decode_u8 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 $fCoding[]$fCodingByteString$fCodingByteString0 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 $fOSCPacket $fOSCBundle $fOSCMessage TransportsendOSC recvPacketclose withTransport sendMessage sendBundlerecvOSC recvBundle recvMessage recvMessagesrecvPacketTimeout waitUntilwaitFor waitImmediate waitMessage waitAddress waitReply waitDatumUDP udpSocketudpPort udp_socketopenUDP udpServersendTorecvFrom$fTransportUDPTCP tcpHandleopenTCP tcpServer'$fTransportTCP Connection DuplexOSCRecvOSCSendOSC$fTransportReaderT$fDuplexOSCReaderT$fRecvOSCReaderT$fSendOSCReaderTbaseSystem.Timeouttimeoutghc-prim GHC.TypesTrue Data.MaybeNothingbytestring-0.10.4.0Data.ByteString.Internal ByteStringCharData.ByteString.Char8packunpackGHC.RealIntegral GHC.FloatFloatingGHC.Base.GHC.Errerrorid Data.EithereitherNumeric showFFloat Text.ReadreadString time-1.4.2Data.Time.Clock.UTCUTCTime 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_ntpisizestorage decode_datumdecode_datum_seqdecode_message_seqb_takeb_dropextend encode_datumencode_message_blobMaybeGHC.WordWord8transformers-0.3.0.0Control.Monad.IO.ClassMonadIOliftIO