&%>non-portable (uses existentially quantified data constructors)stableathas@sigkill.dk The type PermParser p a$ denotes a permutation parser that,  when converted by the  function, parses  s streams with user state st and returns a value of  type a on success. ENormally, a permutation parser is first build with special operators  like (,) and than transformed into a normal parser  using . The expression perm <||> p adds parser p to the permutation  parser perm . The parser p( is not allowed to accept empty input -  use the optional combinator () instead. Returns a & new permutation parser that includes p. The expression f <$$> p$ creates a fresh permutation parser  consisting of parser p*. The the final result of the permutation  parser is the function f applied to the return value of p. The  parser p9 is not allowed to accept empty input - use the optional  combinator ( ) instead. If the function f2 takes more than one parameter, the type variable  bA is instantiated to a functional type which combines nicely with  the adds parser p to the () combinator. This C results in stylized code where a permutation parser starts with a  combining function f' followed by the parsers. The function f F gets its parameters in the order in which the parsers are specified, ' but actual input can be in any order. The expression perm < ||> (x,p) adds parser p to the  permutation parser perm . The parser p is optional - if it can # not be applied, the default value x will be used instead. Returns < a new permutation parser that includes the optional parser p. The expression f < $?> (x,p)$ creates a fresh permutation parser  consisting of parser p*. The the final result of the permutation  parser is the function f applied to the return value of p. The  parser p; is optional - if it can not be applied, the default value  x will be used instead.  The parser  permute perm* parses a permutation of parser described  by perm:. For example, suppose we want to parse a permutation of:  an optional string of a's, the character b and an optional c.  This can be described by: 4 test = permute (tuple <$?> ("",many1 (char 'a')) ( <||> char 'b' . <|?> ('_',char 'c'))  where ! tuple a b c = (a,b,c)       permute-1.0Text.ParserCombinators.Perm PermParser<||><$$><|?><$?>permute StreamBranchBranchPermchoicenewpermaddaddoptmapPerms