[Template-haskell] Small TH demo: generating instances

Rene de Visser Rene_de_Visser at hotmail.com
Thu Aug 24 15:43:23 EDT 2006


I am hoping that this example is small, simple and well commented enough to 
help people generate instances with TH.

The instance generation is used to create instances to render haskell code 
to TH code that generates the original haskell code.

there is an example in Test.hs

The instance generation function is in Base.hs. TH_Render.hs is where the 
instances are derived.

Rene. 


begin 666 TH_render.hs
M>RTC($]05$E/3E, at +69G;&%S9V]W+65X=', at +69T:" C+7T-"GLM(R!/4%1)
M3TY3("UF86QL;W<M;W9E<FQA<'!I;F<M:6YS=&%N8V5S(",M?0T*;6]D=6QE
M(%1(7W1O;VQS+E1(7W)E;F1E<B!W:&5R90T*#0II;7!O<G0 at 3&%N9W5A9V4N
M2&%S:V5L;"Y42 T*:6UP;W)T($QA;F=U86=E+DAA<VME;&PN5$@N4WEN=&%X
M#0H-"FEM<&]R="!,86YG=6%G92Y(87-K96QL+E!A<G-E<@T*:6UP;W)T($QA
M;F=U86=E+DAA<VME;&PN4')E='1Y#0II;7!O<G0 at 3&%N9W5A9V4N2&%S:V5L
M;"Y3>6YT87 at -"@T*:6UP;W)T(%1(7W1O;VQS+D)A<V4-"@T*#0HM+2!V87)I
M86)L92!A<F=U96UE;G0 at 8G5I;&1E<@T*+2T at 8G5I;&0G('1A:V5S(&%N>2!N
M=6UB97(@;V8 at 87)G=65M96YT<R ^/2 Q+"!R96YD97)S('1H96T at 86YD(&-O
M;F-A=&5N871E<R!T:&5M#0HM+2!T;V=E=&AE<B!W:71H($AS07!P+B!&:6YA
M;'D@:70@=W)A<',@=&AE(')E<W5L="!I;B!A($AS<&%R96X-"F-L87-S($)U
M:6QD2'-%>' @82!R('=H97)E#0H@(" @8G5I;&0G(#HZ($AS17AP("T^(&$@
M+3X@<@T*#0II;G-T86YC92 H5$A?4F5N9&5R(&$I(#T^($)U:6QD2'-%>' @
M82!(<T5X<"!W:&5R90T*(" @(&)U:6QD)R!L('@@/2!(<U!A<F5N("0 at 2'-!
M<' @;" H<F5N9&5R('@I#0H-"FEN<W1A;F-E("A42%]296YD97(@82P at 5$A?
M4F5N9&5R(&(L($)U:6QD2'-%>' @8B!R*2 ]/B!"=6EL9$AS17AP(&$@*&(M
M/G(I('=H97)E#0H@(" @8G5I;&0G(&P@>"!Y(#T at 8G5I;&0G("A(<T%P<"!L
M("AR96YD97(@>"DI("!Y#0H-"B M+6)U:6QD(#HZ(&9O<F%L;"!R(&$N("A"
M=6EL9$QI<W0 at 82!R*2 ]/B!A("T^('(-"F)U:6QD(&9U;F,@>" ](&)U:6QD
M)R H9G5N8U]O=70 at 9G5N8RD@> T*#0IF=6YC7V]U="!F(#T at 2'-687(@)"!5
M;E%U86P@)"!(<TED96YT("0@;F%M94)A<V4 at 9@T*#0IC;&%S<R!42%]296YD
M97(@<R!W:&5R90T*("!R96YD97(@.CH@<R M/B!(<T5X< T*#0HM+2!D97)I
M=F4@:6YS=&%N8V4 at 9&5C;&%R871I;VYS(&9O<B!C;&%S<R!42%]296YD97(-
M"B0H9V5N7W)E;F1E<B G)T1E8RD@#0HD*&=E;E]R96YD97(@)R=#;&%U<V4I
M( T*)"AG96Y?<F5N9&5R("<G0V]N*2 -"B0H9V5N7W)E;F1E<B G)U1Y<&4I
M( T*)"AG96Y?<F5N9&5R("<G4W1R:6-T*2 -"B0H9V5N7W)E;F1E<B G)U!A
M="D@#0HD*&=E;E]R96YD97(@)R=";V1Y*2 -"GLM($5X86UP;&4@;W5T<'5T
M#0II;G-T86YC92!42%]296YD97(@0F]D>2!W:&5R90T*(" @<F5N9&5R("A.
M;W)M86Q"(&5X<"D@/2!B=6EL9" G;F]R;6%L0B!E>' -"B @(')E;F1E<B H
M1W5A<F1E9$(@9W5A<F1S*2 ](&)U:6QD("=G=6%R9&5D0B @9W5A<F1S( T*
M+7T-"B0H9V5N7W)E;F1E<B G)U-T;70I( T*)"AG96Y?<F5N9&5R("<G17AP
M*2 -"B0H9V5N7W)E;F1E<B G)TUA=&-H*2 -"B0H9V5N7W)E;F1E<B G)U)A
M;F=E*2 -"@T*+2T at 2&%N9&QE<B!A;&P@=&AE('-P96-I86P at 8V%S97,-"@T*
M:6YS=&%N8V4 at 5$A?4F5N9&5R($9U;D1E<"!W:&5R90T*("!R96YD97(@*$9U
M;D1E<"!N86UE<S$@;F%M97,R*2 ](&5R<F]R(")R96YD97(@)V9U;D1E<"!N
M86UE<S$@;F%M97,R(@T*#0II;G-T86YC92!42%]296YD97(@1F]R96EG;B!W
M:&5R90T*("!R96YD97(@7R ](&5R<F]R(")&;W)E:6=N1"!N;W0@<W5P<&]R
M=&5D(@T*#0II;G-T86YC92!42%]296YD97(@3F%M92!W:&5R90T*("!R96YD
M97(@;F%M92 ](&)U:6QD("=M:TYA;64@*&YA;65"87-E(&YA;64I#0H-"FEN
M<W1A;F-E(%1(7U)E;F1E<B H3F%M92P at 4W1R:6-T+"!4>7!E*2!W:&5R90T*
M("!R96YD97(@*&YA;64L('-T<FEC="P@='EP*2 ](&)U:6QD("=V87)3=')I
M8W14>7!E(&YA;64@*'-T<FEC="P@='EP*0T*#0II;G-T86YC92!42%]296YD
M97(@*$UA>6)E($5X<"D@=VAE<F4-"B @(')E;F1E<B H2G5S="!E>' I(#T@
M8G5I;&0@)TIU<W0 at 97AP#0H@("!R96YD97(@3F]T:&EN9R ](&9U;F-?;W5T
M("=.;W1H:6YG#0H-"FEN<W1A;F-E(%1(7U)E;F1E<B H4W1R:6-T+"!4>7!E
M*2!W:&5R90T*("!R96YD97(@*'-T<FEC="P@='EP*2 ](&)U:6QD("=S=')I
M8W14>7!E('-T<FEC="!T>7 -"@T*:6YS=&%N8V4 at 5$A?4F5N9&5R("A'=6%R
M9"P at 17AP*2!W:&5R90T*(" @<F5N9&5R("A.;W)M86Q'(&=E>' L(&5X<"D@
M/2!B=6EL9" G;F]R;6%L1T4 at 9V5X<"!E>' -"B @(')E;F1E<B H4&%T1R!S
M=&UT<RP at 97AP*2 ](&)U:6QD("=P871'12!S=&UT<PT*#0II;G-T86YC92!4
M2%]296YD97(@*$YA;64L($5X<"D@=VAE<F4-"B @(')E;F1E<B H;F%M92P@
M97AP*2 ](&)U:6QD("=F:65L9$5X<"!N86UE(&5X< T*#0II;G-T86YC92!4
M2%]296YD97(@*$YA;64L(%!A="D@=VAE<F4-"B @(')E;F1E<B H;F%M92P@
M<&%T*2 ](&)U:6QD("<@9FEE;&10870@;F%M92!P870-"@T*:6YS=&%N8V4@
M*%1(7U)E;F1E<B!A*2 ]/B!42%]296YD97(@6V%=('=H97)E#0H@("!R96YD
M97(@;&ES=" ]($AS3&ES=" H;6%P(')E;F1E<B!L:7-T*0T*#0II;G-T86YC
M92!42%]296YD97(@6U1Y<&5=('=H97)E#0H@(')E;F1E<B!C>'1S(#T at 2'-0
M87)E;B D("AF=6YC7V]U=" G8WAT*2!@2'-!<'!@("A(<TQI<W0@)"!M87 @
M<F5N9&5R(&-X=',I#0H-"FEN<W1A;F-E(%1(7U)E;F1E<B!3=')I;F<@=VAE
M<F4-"B @<F5N9&5R('-T<FEN9R ]($AS3&ET("0 at 2'-3=')I;F<@<W1R:6YG
M#0H@#0II;G-T86YC92!42%]296YD97(@3&ET('=H97)E#0H@("!R96YD97(@
M*$EN=&5G97),(&EN="D@/2!B=6EL9" G26YT96=E<DP@:6YT#0H@("!R96YD
M97(@*$-H87),(&-H87(I(#T at 8G5I;&0@)T-H87),(&-H87(-"B @(" @(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" -"FEN<W1A;F-E(%1(
M7U)E;F1E<B!);G1E9V5R('=H97)E#0H@("!R96YD97(@:6YT(" ]("A(<TQI
M=" H2'-);G0@:6YT*2D@( T*#0II;G-T86YC92!42%]296YD97(@26YT('=H
M97)E#0H@("!R96YD97(@:6YT(" ]("A(<TQI=" H2'-);G0@)"!F<F]M26YT
M96=R86P@:6YT*2D-"@T*:6YS=&%N8V4 at 5$A?4F5N9&5R($-H87(@=VAE<F4-
M"B @<F5N9&5R(&-H87(@(#T@*$AS3&ET("A(<T-H87(@8VAA<BDI#0H-"@T*
M<F5N9&5R7V%L;" Z.B H36]N860@;2D@/3X@;2!;1&5C72 M/B!M(%M(<T5X
M<%T-"G)E;F1E<E]A;&P at 9&5C<R ](&1O(&1E8W,G(#PM(&1E8W,-"B @(" @
M(" @(" @(" @(" @(" @(')E='5R;B D("AM87 @<F5N9&5R(&1E8W,G*0T*
M#0HM+2!#86X at 86QW87ES('5S92!M871C:&EN9R!H97)E('1O(')E;6]V92!O
M=71E<FUO<W0@*"D-"G!R:6YT5$@@.CH at 42!;1&5C72 M/B!)3R H*0T*<')I
M;G142"!D96-S(#T at 9&\@9&5C<R<@/"T@<G5N42 D(')E;F1E<E]A;&P at 9&5C
M<PT*(" @(" @(" @(" @(" @(" @<'5T4W1R("0@<')E='1Y4')I;G0@)"!(
M<TQI<W0 at 9&5C<R<-"B @(" @(" @(" @(" @(" @('!U=%-T<B B7&XB#0H-
-"@T*#0H-"@T*#0H-"@``
`
end

begin 666 Base.hs
M>RTC($]05$E/3E, at +69G;&%S9V]W+65X=', at +69T:" C+7T-"FUO9'5L92!4
M2%]T;V]L<RY"87-E('=H97)E#0H-"FEM<&]R="!,86YG=6%G92Y(87-K96QL
M+E1(#0II;7!O<G0 at 3&%N9W5A9V4N2&%S:V5L;"Y42"Y3>6YT87 at -"@T*:6UP
M;W)T($1A=&$N0VAA<@T*#0II;G-T86YC92!3:&]W($EN9F\@=VAE<F4-"B @
M<VAO=R H5'E#;VY)(&1E8RD@/2 B5'E#;VY)("0@(B K*R!S:&]W(&1E8PT*
M#0IP<FEN=$%35" Z.B H4VAO=R!A*2 ]/B!1(&$@+3X at 24\@*"D-"G!R:6YT
M05-4("!A<W0@/2!R=6Y1(&%S=" ^/CT@<'5T4W1R3&X at +B!S:&]W#0H-"G!R
M:6YT0V]D92 Z.B H4'!R(&$I(#T^(%$@82 M/B!)3R H*0T*<')I;G1#;V1E
M(&%S=" ](')U;E$@87-T(#X^/2!P=713='),;B N('!P<FEN= T*#0IT97-T
M7W!R:6YT('%U87-I(#T at 9&\@>V0@/"T@<G5N42 D('%U87-I(#L@('!R:6YT
M(&1]#0H-"BTM+2!(96QP97(@9G5N8W1I;VYS#0H-"G-T<FEN9TYA;64 at .CH@
M3F%M92 M/B!1($5X< T*<W1R:6YG3F%M92!N(#T@<F5T=7)N("A,:71%("A3
M=')I;F=,("AN86UE0F%S92!N*2DI#0H-"BTM+2!3=&]L96X at 9G)O;2!364(@
M24E)(&-O9&4N+BXN#0H-"G1Y<&5);F9O(#HZ($1E8U$@+3X at 42 H3F%M92P@
M6TYA;65=+"!;*$YA;64L($EN="E=+"!;*$YA;64L(%LH36%Y8F4 at 3F%M92P@
M5'EP92E=*5TI#0IT>7!E26YF;R!M(#T-"B @(" @9&\@9" \+2!M#0H@(" @
M(" @(&-A<V4 at 9"!O9 at T*(" @(" @(" @("!D0"A$871A1"!?(%\@7R!?(%\I
M("T^#0H@(" @(" @(" @("!R971U<FX@)" H<VEM<&QE3F%M92 D(&YA;64@
M9"P@<&%R86US02!D+"!C;VYS02!D+"!T97)M<T$@9"D-"B @(" @(" @(" @
M9$ H3F5W='EP940 at 7R!?(%\@7R!?*2 M/@T*(" @(" @(" @(" @<F5T=7)N
M("0@*'-I;7!L94YA;64@)"!N86UE(&0L('!A<F%M<T$@9"P at 8V]N<T$@9"P@
M=&5R;7-!(&0I#0H@(" @(" @(" @(%\@+3X at 97)R;W(@*")D97)I=F4Z(&YO
M="!A(&1A=&$@='EP92!D96-L87)A=&EO;CH@(B K*R!S:&]W(&0I#0H-"B @
M(" @=VAE<F4-"B @(" @(" @8V]N<T$@*$1A=&%$(%\@7R!?(&-S(%\I(" @
M(#T@;6%P(&-O;D$@8W,-"B @(" @(" @8V]N<T$@*$YE=W1Y<&5$(%\@7R!?
M(&, at 7RD@(#T at 6R!C;VY!(&, at 70T*#0H@(" @(" @('!A<F%M<T$@*$1A=&%$
M(%\@7R!P<R!?(%\I(#T@<',-"B @(" @(" @<&%R86US02 H3F5W='EP940@
M7R!?('!S(%\@7RD@/2!P<PT*#0H@(" @(" @('1E<FUS02 H1&%T840 at 7R!?
M(%\@8W, at 7RD@/2!M87 @=&5R;4$@8W,-"B @(" @(" @=&5R;7-!("A.97=T
M>7!E1"!?(%\@7R!C(%\I(#T at 6R!T97)M02!C(%T-"@T*(" @(" @("!T97)M
M02 H3F]R;6%L0R!C('AS*2 @(" @(" @/2 H8RP@;6%P("A<>" M/B H3F]T
M:&EN9RP@<VYD('@I*2!X<RD-"B @(" @(" @=&5R;4$@*%)E8T, at 8R!X<RD@
M(" @(" @(" @(#T@*&,L(&UA<" H7"AN+"!?+"!T*2 M/B H2G5S=" D('-I
M;7!L94YA;64@;BP@="DI('AS*0T*(" @(" @("!T97)M02 H26YF:7A#('0Q
M(&,@=#(I(" @(" @/2 H8RP at 6RA.;W1H:6YG+"!S;F0@=#$I+" H3F]T:&EN
M9RP@<VYD('0R*5TI#0H-"B @(" @(" @8V]N02 H3F]R;6%L0R!C('AS*2 @
M(" @(" @(#T@*'-I;7!L94YA;64 at 8RP@;&5N9W1H('AS*0T*(" @(" @("!C
M;VY!("A296-#(&,@>',I(" @(" @(" @(" @/2 H<VEM<&QE3F%M92!C+"!L
M96YG=&@@>',I#0H@(" @(" @(&-O;D$@*$EN9FEX0R!?(&, at 7RD@(" @(" @
M(" ]("AS:6UP;&5.86UE(&,L(#(I#0H-"B @(" @(" @;F%M92 H1&%T840@
M7R!N(%\@7R!?*2 @(" @(#T@;@T*(" @(" @("!N86UE("A.97=T>7!E1"!?
M(&X at 7R!?(%\I(" @/2!N#0H@(" @(" @(&YA;64 at 9" @(" @(" @(" @(" @
M(" @(" @(" ](&5R<F]R("0@<VAO=R!D#0H-"G-I;7!L94YA;64 at .CH@3F%M
M92 M/B!.86UE#0IS:6UP;&5.86UE(&YM(#T-"B @(&QE="!S(#T@;F%M94)A
M<V4@;FT-"B @(&EN(&-A<V4 at 9')O<%=H:6QE("@O/2<Z)RD@<R!O9 at T*(" @
M(" @("!;72 @(" @(" @(" M/B!M:TYA;64@<PT*(" @(" @("!?.EM=(" @
M(" @(" M/B!M:TYA;64@<PT*(" @(" @("!?.G0@(" @(" @(" M/B!M:TYA
M;64@= T*#0IT>7!E($9U;F-?;F%M92 ]($YA;64-"G1Y<&4 at 0V]N<W1R=6-T
M;W(@/2 H3F%M92P at 6RA-87EB92!.86UE+"!4>7!E*5TI#0IT>7!E($-O;G-?
M=F%R<R ](%M%>'!170T*='EP92!&=6YC=&EO;E]B;V1Y(#T at 17AP40T*='EP
M92!'96Y?9G5N8R ]($-O;G-T<G5C=&]R("T^($-O;G-?=F%R<R M/B!&=6YC
M=&EO;E]B;V1Y#0IT>7!E($9U;F-S(#T at 6RA&=6YC7VYA;64L($=E;E]F=6YC
M*5T@#0H-"BTM(&-O;G-T<G5C="!A;B!I;G-T86YC92!O9B!C;&%S<R!C;&%S
M<U]N86UE(&9O<B!T>7!E(&9O<E]T>7!E#0HM+2!F=6YC<R!I<R!A(&QI<W0@
M;V8@:6YS=&%N8V4@;65T:&]D(&YA;65S('=I=&@@82!C;W)R97-P;VYD:6YG
M#0HM+2!F=6YC=&EO;B!T;R!B=6EL9"!T:&4@;65T:&]D(&)O9'D-"F=E;E]I
M;G-T86YC92 Z.B!.86UE("T^(%1Y<&51("T^(%M#;VYS=')U8W1O<ET at +3X@
M1G5N8W, at +3X@1&5C40T*9V5N7VEN<W1A;F-E(&-L87-S7VYA;64 at 9F]R7W1Y
M<&4 at 8V]N<W1R=6-T;W)S(&9U;F-S(#T@#0H@(&EN<W1A;F-E1" H8WAT(%M=
M*0T*(" @("AA<'!4("AC;VY4(&-L87-S7VYA;64I(&9O<E]T>7!E*0T*(" @
M("AM87 @9G5N8U]D968 at 9G5N8W,I( T*(" @(" @=VAE<F4 at 9G5N8U]D968@
M*&9U;F-?;F%M92P at 9V5N7V9U;F,I( T*(" @(" @(" @(" @(" @(#T at 9G5N
M1"!F=6YC7VYA;64 at +2T@;65T:&]D(&YA;64-"B @(" @(" @(" @(" @(" @
M("TM(&=E;F5R871E(&9U;F-T:6]N(&)O9'D at 9F]R(&5A8V@@8V]N<W1R=6-T
M;W(-"B @(" @(" @(" @(" @(" @("AM87 @*&=E;E]C;&%U<V4 at 9V5N7V9U
M;F,I(&-O;G-T<G5C=&]R<RD-"@T*+2T at 1V5N97)A=&4@=&AE('!A='1E<FX@
M;6%T8V@@86YD(&9U;F-T:6]N(&)O9'D at 9F]R(&$@9VEV96X@;65T:&]D(&%N
M9 T*+2T at 82!G:79E;B!C;VYS=')U8W1O<BX at 9G5N8U]B;V1Y(&ES(&$@9G5N
M8W1I;VX@=&AA="!G96YE<F%T:6]N<R!T:&4-"BTM(&9U;F-T:6]N(&)O9'D-
M"F=E;E]C;&%U<V4 at .CH@*$-O;G-T<G5C=&]R("T^(%M%>'!172 M/B!%>'!1
M*2 M/B!#;VYS=')U8W1O<B M/B!#;&%U<V51#0IG96Y?8VQA=7-E(&9U;F-?
M8F]D>2!D871A7V-O;D H8V]N7VYA;64L(&-O;7!O;F5N=',I(#T@#0H@(" @
M(" M+2!C<F5A=&4 at 82!P87)A;65T97(@9F]R(&5A8V@@8V]M<&]N96YT(&]F
M('1H92!C;VYS=')U8W1O<@T*(" @9&\@=F%R<R \+2!M87!-('9A<B!C;VUP
M;VYE;G1S#0H@(" @(" M+2!F=6YC=&EO;B H=6YN86UE9"D@=&AA="!P871T
M97)N(&UA=&-H97,@=&AE(&-O;G-T<G5C=&]R( T*(" @(" @+2T@;6%P<&EN
M9R!E86-H(&-O;7!O;F5N="!T;R!A('9A;'5E+ at T*(" @(" @*&-L875S92!;
M*&-O;E @8V]N7VYA;64@*&UA<"!V87)0('9A<G,I*5T-"B @(" @(" @(" @
M("AN;W)M86Q"("AF=6YC7V)O9'D at 9&%T85]C;VX@*&UA<"!V87)%('9A<G,I
M*2D at 6UTI#0H@(" @(" @+2T at 8W)E871E(&$@=6YI<75E(&YA;64 at 9F]R(&5A
M8V@@8V]M<&]N96YT+B -"B @(" @("!W:&5R92!V87(@*%\L('1Y<"D@#0H@
M(" @(" @(" @(" @(" @(#T@;F5W3F%M92 -"B @(" @(" @(" @(" @(" @
M(" D(&-A<V4@='EP(&]F( T*(" @(" @(" @(" @(" @(" @(" @*$-O;E0@
M;F%M92D at +3X@=&],("0@;F%M94)A<V4@;F%M90T*(" @(" @(" @(" @(" @
M(" @(" @;W1H97)W:7-E(" @+3X@(G!A<FTB#0H@(" @(" @(" @(" @("!W
M:&5R92!T;TP@*'@Z>2D@/2 H=&],;W=E<B!X*3IY#0H-"G5N0V%P86QI>F4@
M.CH at 6T-H87)=("T^(%M#:&%R70T*=6Y#87!A;&EZ92 H>#IY*2 ]("AT;TQO
M=V5R('@I.GD-"@T*+2T at 1V5N97)A=&4 at 86X@:6YT86YC92!O9B!T:&4 at 8VQA
M<W, at 5$A?4F5N9&5R(&9O<B!T:&4@='EP92!T>7!.86UE#0IG96Y?<F5N9&5R
M(#HZ($YA;64 at +3X@42!;1&5C70T*9V5N7W)E;F1E<B!T>7!.86UE(#T-"B @
M9&\@*%1Y0V]N22!D*2 \+2!R96EF>2!T>7!.86UE("TM($=E="!A;&P@=&AE
M(&EN9F]R;6%T:6]N(&]N('1H92!T>7!E#0H@(" @("AT>7!E7VYA;64L7RQ?
M+&-O;G-T<G5C=&]R<RD@/"T@='EP94EN9F\@*')E='5R;B!D*2 M+2!E>'1R
M86-T(&YA;64 at 86YD(&-O;G-T<G5C=&]R<R @(" @(" @(" @(" @(" @( T*
M(" @("!I7V1E8R \+2!G96Y?:6YS=&%N8V4@*&UK3F%M92 B5$A?4F5N9&5R
M(BD@*&-O;E0@='EP95]N86UE*2!C;VYS=')U8W1O<G,-"B @(" @(" @(" @
M(" @(" @(" @(" M+2!G96YE<F%T:6]N(&9U;F-T:6]N(&9O<B!M971H;V0@
M(G)E;F1E<B(-"B @(" @(" @(" @(" @(" @(" @("!;*&UK3F%M92 B<F5N
M9&5R(BP at 9V5N7W)E;F1E<BE=#0H@(" @(')E='5R;B!;:5]D96-=(" M+2!R
M971U<FX@=&AE(&EN<W1A;F-E(&1E8VQA<F%T:6]N#0H@(" @(" @(" @(" @
M+2T at 9G5N8W1I;VX@=&\@9V5N97)A=&EO;B!T:&4 at 9G5N8W1I;VX at 8F]D>2!F
M;W(@82!P87)T:6-U;&%R(&9U;F-T:6]N#0H@(" @(" @(" @(" @+2T at 86YD
M(&-O;G-T<G5C=&]R#0H@(" @(" @=VAE<F4 at 9V5N7W)E;F1E<B H8V]N3F%M
M92P at 8V]M<&]N96YT<RD@=F%R<R -"B @(" @(" @(" @(" @(" @+2T at 9G5N
M8W1I;VX@;F%M92!I<R!B87-E9"!O;B!C;VYS=')U8W1O<B!N86UE(" -"B @
M(" @(" @(" @(" @(#T@;&5T(&9U;F-.86UE(#T@;6%K94YA;64@)"!U;D-A
M<&%L:7IE("0@;F%M94)A<V4 at 8V]N3F%M92 -"B @(" @(" @(" @(" @(" @
M+2T at 8VAO;W-E('1H92!C;W)R96-T(&)U:6QD97(@9G5N8W1I;VX-"B @(" @
M(" @(" @(" @(" @(" @(&AE861&=6YC(#T at 8V%S92!V87)S(&]F#0H@(" @
M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @6UT at +3X@(F9U;F-?
M;W5T(@T*(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(&]T
M:&5R=VES92 M/B B8G5I;&0B( T*(" @(" @(" @(" @(" @(" @(" @("TM
M(&)U:6QD("=F=6YC3F%M92!P87)M,2!P87)M,B!P87)M,R N+BX-"B @(" @
M(" @(" @(" @(" @("!I;B!A<'!S12 D("AV87)%("0@;6M.86UE(&AE861&
M=6YC*3IF=6YC3F%M93IV87)S("TM('!U="!I="!A;&P@=&]G971H97(-"B @
M(" @(" @(" @(" M+2!E<75I=F%L96YT('1O("=F=6YC4W1R('=H97)E(&9U
M;F-3='(@0T].5$%)3E,@=&AE(&YA;64@=&\@8F4@<F5T=7)N960-"B @(" @
M(" @(" @("!M86ME3F%M92!F=6YC4W1R(#T@*&%P<$4@*'9A<D4@*&UK3F%M
M92 B;6M.86UE(BDI("AL:71%("0 at 4W1R:6YG3"!F=6YC4W1R*2D-"B @(" @
*(" @(" @(" -"@``
`
end

begin 666 Test.hs
M>RTC($]05$E/3E, at +69G;&%S9V]W+65X=', at +69T:" C+7T-"FUO9'5L92!4
M2%]T;V]L<RY497-T('=H97)E#0H-"FEM<&]R="!,86YG=6%G92Y(87-K96QL
M+E1(#0II;7!O<G0 at 3&%N9W5A9V4N2&%S:V5L;"Y42"Y3>6YT87 at -"@T*:6UP
M;W)T($QA;F=U86=E+DAA<VME;&PN4&%R<V5R#0II;7!O<G0 at 3&%N9W5A9V4N
M2&%S:V5L;"Y0<F5T='D-"FEM<&]R="!,86YG=6%G92Y(87-K96QL+E-Y;G1A
M> T*#0II;7!O<G0 at 5$A?=&]O;',N0F%S90T*:6UP;W)T(%1(7W1O;VQS+E1(
M7W)E;F1E<@T*#0IN97=T>7!E(%1E<W0Q(#T at 5&5S=#$@26YT(&1E<FEV:6YG
M(%-H;W<-"FYE=W1Y<&4 at 5&5S=#(@/2!497-T,B!3=')I;F<@9&5R:79I;F<@
M4VAO=PT*;F5W='EP92!497-T,R ](%1E<W0S($)O;VP-"@T*9&%T82!296PQ
M(#T at 4F5L,2!497-T,2!497-T, at T*9&%T82!296PR(#T at 4F5L,B!497-T,2!4
M97-T,PT*#0I[+0T*='EP95]C;VUP<R Z.B!1($EN9F\@+3X at 42!;*$YA;64L
M(%M4>7!E72E=#0IT>7!E7V-O;7!S('1Y<&5?9&5C(#T-"B @("!D;R H5'E#
M;VY)(&0I(#PM('1Y<&5?9&5C#0H@(" @(" @*%\L7RQ?+&1E=&%I;',I(#PM
M('1Y<&5);F9O("AR971U<FX at 9"D-"B @(" @("!R971U<FX@)"!M87 @*%PH
M;F%M92P at 9FEE;&1S*2 M/B H<VEM<&QE3F%M92!N86UE+"!M87 @9FEE;&0@
M9FEE;&1S*2D at 9&5T86EL<PT*(" @('=H97)E(&9I96QD("A?+" H0V]N5"!N
M86UE*2D@/2!S;B!N86UE#0H@(" @(" @(" @9FEE;&0@*%\L("A!<'!4("A#
M;VY4(&YA;64Q*2 H0V]N5"!N86UE,BDI*2 -"B @(" @(" @(" @(" @/2 @
M07!P5" H<VX@;F%M93$I("AS;B!N86UE,BD@#0H@(" @(" @(" @9FEE;&0@
M*%\L("A!<'!4("A!<'!4("A#;VY4(%\I("A#;VY4(&YA;64Q*2D@*$-O;E0@
M;F%M93(I*2D@#0H@(" @(" @(" @(" @(" @(#T@<VX@;F%M93$-"B @(" @
M(" @("!S;B!N86UE(#T@*$-O;E0@)"!S:6UP;&5.86UE(&YA;64I(" -"@T*
M>#,@/2 D*&1O(&]U=" \+2 @='EP95]C;VUP<R D(')E:69Y("<G1&5C#0H@
M(" @(" @(" @;&EF=" H<VAO=R!O=70I*0T*#0HM?0T*#0IZ,B ]('1E<W1?
M<')I;G0 at 6V1\('1Y<&4 at 5&5S=%]D8B ]("A296PQ+"!296PR*2!\70T*#0IZ
M-" Z.B!1(%M$96-=#0IZ-" ](%MD?"!T>7!E(%1E<W1?9&(@/2 H4F5L,2P@
M4F5L,BD@?%T-"@T*>C4@/2!;9'P@>" ](#%\70T*>C8@/2!P<FEN=$%35"!Z
M-2 M+5M686Q$("A687)0('@I("A.;W)M86Q"("A,:71%("A);G1E9V5R3" Q
M*2DI(%M=70T*#0IP,2 ]('!A<G-E36]D=6QE(")Y(&P@;B ](&P@*R Q.R!X
M(#T@,2 K('D@*'D@,R!Z*2 H>2!Z('HI(@T*<#0@/2!P87)S94UO9'5L92 B
M>2 ](%LQ+#(L,UTB#0H-"G R("A087)S94]K(' I(#T@<')E='1Y4')I;G0@
M< T*#0IP,R ](' R(' Q#0H-"G(Q(#HZ(%$@26YF;PT*<C$@/2!R96EF>2 G
M)T1E8PT*<C(@/2!P<FEN=$%35"!R,0T*+2T@<C(@/2!T97-T7W!R:6YT("0@
M<C$-"B @(" @#0H-"@T*>" ]("0H<F5I9GD@)R=$96,@(#X^/2!L:69T("X@
M<'!R:6YT*0T*+2UX,2 ]("0H<F5I9GD@)R=$96,@(#X^/2!L:69T("X@='EP
M95]C;VUP<RD-"BTM('@R(#T@)"AR96EF>2 G)T1E8R @/CX](&QI9G0 at +B!S
M:&]W("X@='EP94EN9F\@+B!T>6-O;FDI#0H-"G at T(#T@)"AD;R H5'E#;VY)
M(&0I(#PM(')E:69Y("<G1&5C#0H@(" @(" @(" @*%\L7RQ?+&]U="D@/"T@
M='EP94EN9F\@*')E='5R;B!D*0T*(" @(" @(" @(&QI9G0@*'-H;W<@;W5T
M*2D-"@T*='0Q(#T@)"AG96Y?<F5N9&5R("<G0F]D>2 ^/CT@;&EF=" N('!P
M<FEN="D-"@T*9&%T82!497-T7U1(4B ]($-H87(Q($-H87(@?"!);G0Q($EN
M=&5G97(@26YT#0H-"BTM('HW(#T@<')I;G142"!Z-0T*>C@@/2!P<FEN=%1(
M(%MD?"!I;G-T86YC92!42%]296YD97(@5&5S=%]42%(@=VAE<F4-"B @(" @
M(" @(" @(" @(" @(" @(" @(')E;F1E<B H0VAA<C$@>"D@/2!(<TQI=" D
M($AS0VAA<B D("=A)R -"B @(" @(" @(" @(" @(" @(" @(" @(')E;F1E
M<B H26YT,2!X('DI(#T at 2'-,:70@*$AS26YT('@I('Q=#0H-"GDQ(#T@<')I
M;G1!4U0 at 6V1\(&EN<W1A;F-E(%1(7U)E;F1E<B!497-T7U1(4B!W:&5R90T*
M(" @(" @(" @(" @(" @(" @(" @(" @<F5N9&5R("A#:&%R,2!X*2 ]($AS
M3&ET("0 at 2'-#:&%R("0@)V$G( T*(" @(" @(" @(" @(" @(" @(" @(" @
M<F5N9&5R("A);G0Q('@@>2D@/2!(<TQI=" H2'-);G0@>"D@?%T-"BTM(&]U
M='!U="!O9B!F=6YC=&EO;B!Z. T*)"AS97%U96YC92!;*&EN<W1A;F-E1" H
M8WAT(%M=*0T*(" @("AA<'!4("AC;VY4("AM:TYA;64@(E1(7U)E;F1E<B(I
M*2 H8V]N5" H;6M.86UE(")497-T7U1(4B(I*2D-"B @("!;*&9U;D0@*&UK
M3F%M92 B<F5N9&5R(BD-"B @(" @(" @6RAC;&%U<V4 at 6RAC;VY0("AM:TYA
M;64@(D-H87(Q(BD at 6RAV87)0("AM:TYA;64@(G at B*2E=*5T-"B @(" @(" @
M(" @("AN;W)M86Q"#0H@(" @(" @(" @(" @(" H:6YF:7A%("A*=7-T("AC
M;VY%("AM:TYA;64@(DAS3&ET(BDI*2 H=F%R12 H;6M.86UE("(D(BDI#0H@
M(" @(" @(" @(" @(" @(" H2G5S= T*(" @(" @(" @(" @(" @(" @(" @
M*&EN9FEX12 H2G5S=" H8V]N12 H;6M.86UE(")(<T-H87(B*2DI("AV87)%
M("AM:TYA;64@(B0B*2D-"B @(" @(" @(" @(" @(" @(" @(" @("A*=7-T
M("AL:71%("A#:&%R3" G82<I*2DI*2DI#0H@(" @(" @(" @("!;72DL#0H@
M(" @(" @(" H8VQA=7-E#0H@(" @(" @(" @("!;*&-O;E @*&UK3F%M92 B
M26YT,2(I(%LH=F%R4" H;6M.86UE(")X(BDI+" H=F%R4" H;6M.86UE(")Y
M(BDI72E=#0H@(" @(" @(" @(" H;F]R;6%L0 at T*(" @(" @(" @(" @(" @
M*&%P<$4@*&-O;D4@*&UK3F%M92 B2'-,:70B*2D-"B @(" @(" @(" @(" @
M(" @("AA<'!%("AC;VY%("AM:TYA;64@(DAS26YT(BDI("AV87)%("AM:TYA
D;64@(G at B*2DI*2D-"B @(" @(" @(" @(%M=*5TI72E=*0T*
`
end




More information about the template-haskell mailing list