JD      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(c) 2012 Michael Sloan  BSD-style (see the LICENSE file)!Michael Sloan <mgsloan@gmail.com> experimentalGHC onlyNoneG?Specifies all of the information needed to implement a plumber.The plumber implementation!Optional explicit type signaturesArities to generate - 26 is maxPrefix to use for operatorZSpecifies all of the information needed to construct type declarations for the plumber."Type of the left argument's result #Type of the right argument's result aResults type. This needs to be wrapped in a forall naming all of the utilized type variables. .A basic set of types, which make r' the left type, and r'' the right type. The resultType is a forall that introduces these type variables, and has undefined content. Therefore any implementation in terms of baseTypes needs to redefine resultType, as the Forall has undefined as its content. Creates a plumber spec for the given prefix for the generated operators, and the name of the infix operator to use to construct the implementation. EAll of the operator names that the given PlumberSpec would implement.For now this is just a string-yielding function, to be evaluated by the user, to generate the line defining the fixities. This code should be pasted below the TH invocation of implementPlumbers6Implements all of the plumbers specified by the given  PlumberSpec..Implement only the specific plumber requested.     (c) 2012 Michael Sloan  BSD-style (see the LICENSE file)!Michael Sloan <mgsloan@gmail.com> experimentalGHC onlyNoneJ  !"#$%  !"#$%(c) 2012 Michael Sloan  BSD-style (see the LICENSE file)!Michael Sloan <mgsloan@gmail.com> experimentalGHC onlyNoneMm&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~m~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      \~}|{zyxwvutsrqponmlkjihgfedcba`_^]~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!      l&9 '9 (9 )9 *9 +9 ,9 -9 .9 /9 09 19 29 39 49 59 69 79 89 99 :9 ;9 <9 =9 >9 ?9 @9 A9 B9 C9 D9 E9 F9 G9 H9 I9 J9 K9 L9 M9 N9 O9 P9 Q9 R9 S9 T9 U9 V9 W9 X9 Y9 Z9 [9 \9 ]9 ^9 _9 `9 a9 b9 c9 d9 e9 f9 g9 h9 i9 j9 k9 l9 m9 n9 o9 p9 q9 r9 s9 t9 u9 v9 w9 x9 y9 z9 {9 |9 }9 ~9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9  9  9  9  9  9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9  9 !9 "9 #9 $9 %9 &9 '9 (9 )9 *9 +9 ,9 -9 .9 /9 09 19 29 39 49 59 69 79 89 99 :9 ;9 <9 =9 >9 ?9 @9 A9 B9 C9 D9 E9 F9 G9 H9 I9 J9 K9 L9 M9 N9 O9 P9 Q9 R9 S9 T9 U9 V9 W9 X9 Y9 Z9 [9 ]9 ^9 _9 `9 a9 b9 c9 d9 e9 f9 g9 h9 i9 j9 k9 l9 m9 n9 o9 p9 q9 r9 s9 t9 u9 v9 w9 x9 y9 z9 {9 |9 }9 ~9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9  9  9  9  9  9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9  9 !9 "9 #9 $9 %9 &9 '9 (9 )9 *9 +9 ,9 -9 .9 /9 09 19 29 39 49 59 69 79 89 99 :9 ;9 <9 =9 >9 ?9 @9 A9 B9 C9 D9 E9 F9 G9 H9 I9 J9 K9 L9 M9 N9 O9 P9 Q9 R9 S9 T9 U9 V9 W9 X9 Y9 Z9 [9 \9 ]9 ^9 _9 `9 a9 b9 c9 d9 e9 f9 g9 h9 i9 j9 k9 l9 m9 n9 o9 p9 q9 r9 s9 t9 u9 v9 w9 x9 y9 z9 {9 |9 }9 ~9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 (c) 2012 Michael Sloan  BSD-style (see the LICENSE file)!Michael Sloan <mgsloan@gmail.com> experimentalGHC onlyNone6      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~6-,+*)('&%$#"!      ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.69 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9  9  9  9  9  9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9  9 !9 "9 #9 $9 %9 &9 '9 (9 )9 *9 +9 ,9 -9 .9 /9 09 19 29 39 49 59 69 79 89 99 :9 ;9 <9 =9 >9 ?9 @9 A9 B9 C9 D9 E9 F9 G9 H9 I9 J9 K9 L9 M9 N9 O9 P9 Q9 R9 S9 T9 U9 V9 W9 X9 Y9 Z9 [9 \9 ]9 ^9 _9 `9 a9 b9 c9 d9 e9 f9 g9 h9 i9 j9 k9 l9 m9 n9 o9 p9 q9 r9 s9 t9 u9 v9 w9 x9 y9 z9 {9 |9 }9 ~9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~%plumbers-0.0.4-K6HQddbJGVvAwpjoHL7TcxControl.Plumbers.THControl.Plumbers.SpecsControl.Plumbers.MonadControl.Plumbers PlumberSpec plumberOpE plumberTypesplumberArities plumberPrefix PlumberTypesleftType rightType resultType baseTypesbaseSpec operatorNames aritiesStringimplementPlumbersimplementPlumberappsTarrowsTtuplesTmkVEmkVPmkVTmkVB addForalls productSpeccompositionSpec lbindSpec rbindSpec frbindSpec flbindSpec productTypescompositionTypes lbindTypes rbindTypes fbindTypesaddMonadContextaddBaseContext>=^>=<>=>>=&>=*>=^^>=^<>=^>>=^&>=^*>=<^>=<<>=<>>=<&>=<*>=>^>=><>=>>>=>&>=>*>=&^>=&<>=&>>=&&>=&*>=*^>=*<>=*>>=*&>=**>=^^^>=^^<>=^^>>=^^&>=^^*>=^<^>=^<<>=^<>>=^<&>=^<*>=^>^>=^><>=^>>>=^>&>=^>*>=^&^>=^&<>=^&>>=^&&>=^&*>=^*^>=^*<>=^*>>=^*&>=^**>=<^^>=<^<>=<^>>=<^&>=<^*>=<<^>=<<<>=<<>>=<<&>=<<*>=<>^>=<><>=<>>>=<>&>=<>*>=<&^>=<&<>=<&>>=<&&>=<&*>=<*^>=<*<>=<*>>=<*&>=<**>=>^^>=>^<>=>^>>=>^&>=>^*>=><^>=><<>=><>>=><&>=><*>=>>^>=>><>=>>>>=>>&>=>>*>=>&^>=>&<>=>&>>=>&&>=>&*>=>*^>=>*<>=>*>>=>*&>=>**>=&^^>=&^<>=&^>>=&^&>=&^*>=&<^>=&<<>=&<>>=&<&>=&<*>=&>^>=&><>=&>>>=&>&>=&>*>=&&^>=&&<>=&&>>=&&&>=&&*>=&*^>=&*<>=&*>>=&*&>=&**>=*^^>=*^<>=*^>>=*^&>=*^*>=*<^>=*<<>=*<>>=*<&>=*<*>=*>^>=*><>=*>>>=*>&>=*>*>=*&^>=*&<>=*&>>=*&&>=*&*>=**^>=**<>=**>>=**&>=***<=^<=<<=><=&<=*<=^^<=^<<=^><=^&<=^*<=<^<=<<<=<><=<&<=<*<=>^<=><<=>><=>&<=>*<=&^<=&<<=&><=&&<=&*<=*^<=*<<=*><=*&<=**<=^^^<=^^<<=^^><=^^&<=^^*<=^<^<=^<<<=^<><=^<&<=^<*<=^>^<=^><<=^>><=^>&<=^>*<=^&^<=^&<<=^&><=^&&<=^&*<=^*^<=^*<<=^*><=^*&<=^**<=<^^<=<^<<=<^><=<^&<=<^*<=<<^<=<<<<=<<><=<<&<=<<*<=<>^<=<><<=<>><=<>&<=<>*<=<&^<=<&<<=<&><=<&&<=<&*<=<*^<=<*<<=<*><=<*&<=<**<=>^^<=>^<<=>^><=>^&<=>^*<=><^<=><<<=><><=><&<=><*<=>>^<=>><<=>>><=>>&<=>>*<=>&^<=>&<<=>&><=>&&<=>&*<=>*^<=>*<<=>*><=>*&<=>**<=&^^<=&^<<=&^><=&^&<=&^*<=&<^<=&<<<=&<><=&<&<=&<*<=&>^<=&><<=&>><=&>&<=&>*<=&&^<=&&<<=&&><=&&&<=&&*<=&*^<=&*<<=&*><=&*&<=&**<=*^^<=*^<<=*^><=*^&<=*^*<=*<^<=*<<<=*<><=*<&<=*<*<=*>^<=*><<=*>><=*>&<=*>*<=*&^<=*&<<=*&><=*&&<=*&*<=**^<=**<<=**><=**&<=***<<<<^<<<<<><<&<<*<<^^<<^<<<^><<^&<<^*<<<^<<<<<<<><<<&<<<*<<>^<<><<<>><<>&<<>*<<&^<<&<<<&><<&&<<&*<<*^<<*<<<*><<*&<<**<<^^^<<^^<<<^^><<^^&<<^^*<<^<^<<^<<<<^<><<^<&<<^<*<<^>^<<^><<<^>><<^>&<<^>*<<^&^<<^&<<<^&><<^&&<<^&*<<^*^<<^*<<<^*><<^*&<<^**<<<^^<<<^<<<<^><<<^&<<<^*<<<<^<<<<<<<<<><<<<&<<<<*<<<>^<<<><<<<>><<<>&<<<>*<<<&^<<<&<<<<&><<<&&<<<&*<<<*^<<<*<<<<*><<<*&<<<**<<>^^<<>^<<<>^><<>^&<<>^*<<><^<<><<<<><><<><&<<><*<<>>^<<>><<<>>><<>>&<<>>*<<>&^<<>&<<<>&><<>&&<<>&*<<>*^<<>*<<<>*><<>*&<<>**<<&^^<<&^<<<&^><<&^&<<&^*<<&<^<<&<<<<&<><<&<&<<&<*<<&>^<<&><<<&>><<&>&<<&>*<<&&^<<&&<<<&&><<&&&<<&&*<<&*^<<&*<<<&*><<&*&<<&**<<*^^<<*^<<<*^><<*^&<<*^*<<*<^<<*<<<<*<><<*<&<<*<*<<*>^<<*><<<*>><<*>&<<*>*<<*&^<<*&<<<*&><<*&&<<*&*<<**^<<**<<<**><<**&<<***>>^>><>>>>>&>>*>>^^>>^<>>^>>>^&>>^*>><^>><<>><>>><&>><*>>>^>>><>>>>>>>&>>>*>>&^>>&<>>&>>>&&>>&*>>*^>>*<>>*>>>*&>>**>>^^^>>^^<>>^^>>>^^&>>^^*>>^<^>>^<<>>^<>>>^<&>>^<*>>^>^>>^><>>^>>>>^>&>>^>*>>^&^>>^&<>>^&>>>^&&>>^&*>>^*^>>^*<>>^*>>>^*&>>^**>><^^>><^<>><^>>><^&>><^*>><<^>><<<>><<>>><<&>><<*>><>^>><><>><>>>><>&>><>*>><&^>><&<>><&>>><&&>><&*>><*^>><*<>><*>>><*&>><**>>>^^>>>^<>>>^>>>>^&>>>^*>>><^>>><<>>><>>>><&>>><*>>>>^>>>><>>>>>>>>>&>>>>*>>>&^>>>&<>>>&>>>>&&>>>&*>>>*^>>>*<>>>*>>>>*&>>>**>>&^^>>&^<>>&^>>>&^&>>&^*>>&<^>>&<<>>&<>>>&<&>>&<*>>&>^>>&><>>&>>>>&>&>>&>*>>&&^>>&&<>>&&>>>&&&>>&&*>>&*^>>&*<>>&*>>>&*&>>&**>>*^^>>*^<>>*^>>>*^&>>*^*>>*<^>>*<<>>*<>>>*<&>>*<*>>*>^>>*><>>*>>>>*>&>>*>*>>*&^>>*&<>>*&>>>*&&>>*&*>>**^>>**<>>**>>>**&>>***$^$<$>$&$*$^^$^<$^>$^&$^*$<^$<<$<>$<&$<*$>^$><$>>$>&$>*$&^$&<$&>$&&$&*$*^$*<$*>$*&$**$^^^$^^<$^^>$^^&$^^*$^<^$^<<$^<>$^<&$^<*$^>^$^><$^>>$^>&$^>*$^&^$^&<$^&>$^&&$^&*$^*^$^*<$^*>$^*&$^**$<^^$<^<$<^>$<^&$<^*$<<^$<<<$<<>$<<&$<<*$<>^$<><$<>>$<>&$<>*$<&^$<&<$<&>$<&&$<&*$<*^$<*<$<*>$<*&$<**$>^^$>^<$>^>$>^&$>^*$><^$><<$><>$><&$><*$>>^$>><$>>>$>>&$>>*$>&^$>&<$>&>$>&&$>&*$>*^$>*<$>*>$>*&$>**$&^^$&^<$&^>$&^&$&^*$&<^$&<<$&<>$&<&$&<*$&>^$&><$&>>$&>&$&>*$&&^$&&<$&&>$&&&$&&*$&*^$&*<$&*>$&*&$&**$*^^$*^<$*^>$*^&$*^*$*<^$*<<$*<>$*<&$*<*$*>^$*><$*>>$*>&$*>*$*&^$*&<$*&>$*&&$*&*$**^$**<$**>$**&$****^*<*>*&***^^*^<*^>*^&*^**<^*<<*<>*<&*<**>^*><*>>*>&*>**&^*&<*&>*&&*&***^**<**>**&****^^^*^^<*^^>*^^&*^^**^<^*^<<*^<>*^<&*^<**^>^*^><*^>>*^>&*^>**^&^*^&<*^&>*^&&*^&**^*^*^*<*^*>*^*&*^***<^^*<^<*<^>*<^&*<^**<<^*<<<*<<>*<<&*<<**<>^*<><*<>>*<>&*<>**<&^*<&<*<&>*<&&*<&**<*^*<*<*<*>*<*&*<***>^^*>^<*>^>*>^&*>^**><^*><<*><>*><&*><**>>^*>><*>>>*>>&*>>**>&^*>&<*>&>*>&&*>&**>*^*>*<*>*>*>*&*>***&^^*&^<*&^>*&^&*&^**&<^*&<<*&<>*&<&*&<**&>^*&><*&>>*&>&*&>**&&^*&&<*&&>*&&&*&&**&*^*&*<*&*>*&*&*&****^^**^<**^>**^&**^***<^**<<**<>**<&**<***>^**><**>>**>&**>***&^**&<**&>**&&**&****^***<***>***&****