úÎ ò  NoneThe ! typeclass represents types that 0 can be encoded and decoded in the TNET format.  An example instance:  data Person = Person {  name :: String ! , age :: Integer  }  instance TNET Person where , toTNET (Person n a) = dict [ "name" .= n , , "age" .= a  ]  fromTNET tval = do  n <- tval .: "name"  a <- tval .: "age"  return $ Person n a A + represents a raw TNET object. TNET values ! are one of the following types:  a string of bytes  a UTF-8 encoded string  an integer  a floating point number  a boolean  null  a dictionary type  a list of TValues &Used to create a TNET dictionary from ( TNET values. Meant to be used with the  ' operator as in the following example:  myDict = dict [ "a" .= 5 # , "is_dict" .= True  ] ,Helper function to extract TNET values from / a TNET dictionary. Meant to be used as in the  following example:  data Person = Person {  name :: String ! , age :: Integer  } * personFromDict :: TValue -> Maybe Person  personFromDict tdict = do  name <- tdict .: "name"  age <- tdict .: "age"  return $ Person name age -Encode a Haskell value into the TNET format.  Some examples: encode 5"1:5#"encode "Hello" "5:Hello$"encode (-12.3) "5:-12.3^" encode ()"0:~"/Decode a TNET format bytestring into a Haskell 2 value. An explicit type annotation may be needed - if the type of the decoded value can not be  determined: decode "0:~" :: Maybe ()Just ()$decode "0:~" :: Maybe (Maybe String) Just Nothingdecode "1:5#" :: Maybe IntegerJust 5  let x = decode "4:true!" in  case x of & Just True -> putStrLn "got true!" ' Just False -> putStrLn "got false!" + Nothing -> putStrLn "error decoding"           tnet-0.0.1TNETtoTNETfromTNETTValuedict.=.:encodedecode tnetParser$fTNET[] $fTNETMaybe$fTNETByteString $fTNETChar $fTNET[]0 $fTNET[]1 $fTNETBool $fTNETDouble $fTNETInteger $fTNETTValue$fTNET()