Small TH demo: generating instances
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,@+69G;&%S9V]W+65X=',@+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@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@3&%N9W5A9V4N2&%S:V5L M;"Y3>6YT87@-"@T*:6UP;W)T(%1(7W1O;VQS+D)A<V4-"@T*#0HM+2!V87)I M86)L92!A<F=U96UE;G0@8G5I;&1E<@T*+2T@8G5I;&0G('1A:V5S(&%N>2!N M=6UB97(@;V8@87)G=65M96YT<R ^/2 Q+"!R96YD97)S('1H96T@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@2'-! M<' @;" H<F5N9&5R('@I#0H-"FEN<W1A;F-E("A42%]296YD97(@82P@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@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@82!R*2 ]/B!A("T^('(-"F)U:6QD(&9U;F,@>" ](&)U:6QD M)R H9G5N8U]O=70@9G5N8RD@> T*#0IF=6YC7V]U="!F(#T@2'-687(@)"!5 M;E%U86P@)"!(<TED96YT("0@;F%M94)A<V4@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@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@2&%N9&QE<B!A;&P@=&AE('-P96-I86P@8V%S97,-"@T* M:6YS=&%N8V4@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@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@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@5$A?4F5N9&5R("A'=6%R M9"P@17AP*2!W:&5R90T*(" @<F5N9&5R("A.;W)M86Q'(&=E>' L(&5X<"D@ M/2!B=6EL9" G;F]R;6%L1T4@9V5X<"!E>' -"B @(')E;F1E<B H4&%T1R!S M=&UT<RP@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@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@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@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@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@9&5C<R ](&1O(&1E8W,G(#PM(&1E8W,-"B @(" @ M(" @(" @(" @(" @(" @(')E='5R;B D("AM87 @<F5N9&5R(&1E8W,G*0T* M#0HM+2!#86X@86QW87ES('5S92!M871C:&EN9R!H97)E('1O(')E;6]V92!O M=71E<FUO<W0@*"D-"G!R:6YT5$@@.CH@42!;1&5C72 M/B!)3R H*0T*<')I M;G142"!D96-S(#T@9&\@9&5C<R<@/"T@<G5N42 D(')E;F1E<E]A;&P@9&5C M<PT*(" @(" @(" @(" @(" @(" @<'5T4W1R("0@<')E='1Y4')I;G0@)"!( M<TQI<W0@9&5C<R<-"B @(" @(" @(" @(" @(" @('!U=%-T<B B7&XB#0H- -"@T*#0H-"@T*#0H-"@`` ` end begin 666 Base.hs M>RTC($]05$E/3E,@+69G;&%S9V]W+65X=',@+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@3&%N9W5A9V4N2&%S:V5L;"Y42"Y3>6YT87@-"@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@24\@*"D-"G!R:6YT M05-4("!A<W0@/2!R=6Y1(&%S=" ^/CT@<'5T4W1R3&X@+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@9&\@>V0@/"T@<G5N42 D('%U87-I(#L@('!R:6YT M(&1]#0H-"BTM+2!(96QP97(@9G5N8W1I;VYS#0H-"G-T<FEN9TYA;64@.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@9G)O;2!364(@ M24E)(&-O9&4N+BXN#0H-"G1Y<&5);F9O(#HZ($1E8U$@+3X@42 H3F%M92P@ M6TYA;65=+"!;*$YA;64L($EN="E=+"!;*$YA;64L(%LH36%Y8F4@3F%M92P@ M5'EP92E=*5TI#0IT>7!E26YF;R!M(#T-"B @(" @9&\@9" \+2!M#0H@(" @ M(" @(&-A<V4@9"!O9@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@7R!?(%\@7R!?*2 M/@T*(" @(" @(" @(" @<F5T=7)N M("0@*'-I;7!L94YA;64@)"!N86UE(&0L('!A<F%M<T$@9"P@8V]N<T$@9"P@ M=&5R;7-!(&0I#0H@(" @(" @(" @(%\@+3X@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(&,@7RD@(#T@6R!C;VY!(&,@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@7R!? M(%\@8W,@7RD@/2!M87 @=&5R;4$@8W,-"B @(" @(" @=&5R;7-!("A.97=T M>7!E1"!?(%\@7R!C(%\I(#T@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,@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@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@8RP@;&5N9W1H('AS*0T*(" @(" @("!C M;VY!("A296-#(&,@>',I(" @(" @(" @(" @/2 H<VEM<&QE3F%M92!C+"!L M96YG=&@@>',I#0H@(" @(" @(&-O;D$@*$EN9FEX0R!?(&,@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@7R!?(%\I(" @/2!N#0H@(" @(" @(&YA;64@9" @(" @(" @(" @(" @ M(" @(" @(" ](&5R<F]R("0@<VAO=R!D#0H-"G-I;7!L94YA;64@.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@9')O<%=H:6QE("@O/2<Z)RD@<R!O9@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@0V]N<W1R=6-T M;W(@/2 H3F%M92P@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@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@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@+3X@ M1G5N8W,@+3X@1&5C40T*9V5N7VEN<W1A;F-E(&-L87-S7VYA;64@9F]R7W1Y M<&4@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@9G5N8W,I( T*(" @(" @=VAE<F4@9G5N8U]D968@ M*&9U;F-?;F%M92P@9V5N7V9U;F,I( T*(" @(" @(" @(" @(" @(#T@9G5N M1"!F=6YC7VYA;64@+2T@;65T:&]D(&YA;64-"B @(" @(" @(" @(" @(" @ M("TM(&=E;F5R871E(&9U;F-T:6]N(&)O9'D@9F]R(&5A8V@@8V]N<W1R=6-T M;W(-"B @(" @(" @(" @(" @(" @("AM87 @*&=E;E]C;&%U<V4@9V5N7V9U M;F,I(&-O;G-T<G5C=&]R<RD-"@T*+2T@1V5N97)A=&4@=&AE('!A='1E<FX@ M;6%T8V@@86YD(&9U;F-T:6]N(&)O9'D@9F]R(&$@9VEV96X@;65T:&]D(&%N M9 T*+2T@82!G:79E;B!C;VYS=')U8W1O<BX@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@.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@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+@T*(" @(" @*&-L875S92!; M*&-O;E @8V]N7VYA;64@*&UA<"!V87)0('9A<G,I*5T-"B @(" @(" @(" @ M("AN;W)M86Q"("AF=6YC7V)O9'D@9&%T85]C;VX@*&UA<"!V87)%('9A<G,I M*2D@6UTI#0H@(" @(" @+2T@8W)E871E(&$@=6YI<75E(&YA;64@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@+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@6T-H87)=("T^(%M#:&%R70T*=6Y#87!A;&EZ92 H>#IY*2 ]("AT;TQO M=V5R('@I.GD-"@T*+2T@1V5N97)A=&4@86X@:6YT86YC92!O9B!T:&4@8VQA M<W,@5$A?4F5N9&5R(&9O<B!T:&4@='EP92!T>7!.86UE#0IG96Y?<F5N9&5R M(#HZ($YA;64@+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@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@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@9G5N8W1I;VX@=&\@9V5N97)A=&EO;B!T:&4@9G5N8W1I;VX@8F]D>2!F M;W(@82!P87)T:6-U;&%R(&9U;F-T:6]N#0H@(" @(" @(" @(" @+2T@86YD M(&-O;G-T<G5C=&]R#0H@(" @(" @=VAE<F4@9V5N7W)E;F1E<B H8V]N3F%M M92P@8V]M<&]N96YT<RD@=F%R<R -"B @(" @(" @(" @(" @(" @+2T@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@8V]N3F%M92 -"B @(" @(" @(" @(" @(" @ M+2T@8VAO;W-E('1H92!C;W)R96-T(&)U:6QD97(@9G5N8W1I;VX-"B @(" @ M(" @(" @(" @(" @(" @(&AE861&=6YC(#T@8V%S92!V87)S(&]F#0H@(" @ M(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @6UT@+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@4W1R:6YG3"!F=6YC4W1R*2D-"B @(" @ *(" @(" @(" -"@`` ` end begin 666 Test.hs M>RTC($]05$E/3E,@+69G;&%S9V]W+65X=',@+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@3&%N9W5A9V4N2&%S:V5L;"Y42"Y3>6YT87@-"@T*:6UP M;W)T($QA;F=U86=E+DAA<VME;&PN4&%R<V5R#0II;7!O<G0@3&%N9W5A9V4N M2&%S:V5L;"Y0<F5T='D-"FEM<&]R="!,86YG=6%G92Y(87-K96QL+E-Y;G1A M> T*#0II;7!O<G0@5$A?=&]O;',N0F%S90T*:6UP;W)T(%1(7W1O;VQS+E1( M7W)E;F1E<@T*#0IN97=T>7!E(%1E<W0Q(#T@5&5S=#$@26YT(&1E<FEV:6YG M(%-H;W<-"FYE=W1Y<&4@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@4F5L,2!497-T,2!497-T,@T*9&%T82!296PR(#T@4F5L,B!497-T,2!4 M97-T,PT*#0I[+0T*='EP95]C;VUP<R Z.B!1($EN9F\@+3X@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@9"D-"B @(" @("!R971U<FX@)"!M87 @*%PH M;F%M92P@9FEE;&1S*2 M/B H<VEM<&QE3F%M92!N86UE+"!M87 @9FEE;&0@ M9FEE;&1S*2D@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@6V1\('1Y<&4@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@+B!S M:&]W("X@='EP94EN9F\@+B!T>6-O;FDI#0H-"G@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@2'-,:70@*$AS26YT('@I('Q=#0H-"GDQ(#T@<')I M;G1!4U0@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@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@6RAC;VY0("AM:TYA M;64@(D-H87(Q(BD@6RAV87)0("AM:TYA;64@(G@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@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@B*2DI*2D-"B @(" @(" @(" @(%M=*5TI72E=*0T* ` end
I've tagged it on as an example in http://haskell.org/haskellwiki/Template_Haskell If you feel like it, you could inline more of your message, and attachments, into the Wiki page. Feel free to make other improvements! Simon | -----Original Message----- | From: template-haskell-bounces@haskell.org [mailto:template-haskell-bounces@haskell.org] On Behalf | Of Rene de Visser | Sent: 24 August 2006 20:43 | To: template-haskell@haskell.org | Subject: [Template-haskell] Small TH demo: generating instances | | 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. |
"Simon Peyton-Jones" <simonpj@microsoft.com> schrieb im Newsbeitrag I've tagged it on as an example in http://haskell.org/haskellwiki/Template_Haskell If you feel like it, you could inline more of your message, and attachments, into the Wiki page. Feel free to make other improvements! Hello Simon, Already done, it was the point above the one you added. I will combine the two entries together (I put the body on another page as I thought it would be too long). Rene. | -----Original Message----- | From: template-haskell-bounces@haskell.org [mailto:template-haskell-bounces@haskell.org] On Behalf | Of Rene de Visser | Sent: 24 August 2006 20:43 | To: template-haskell@haskell.org | Subject: [Template-haskell] Small TH demo: generating instances | | 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. |
participants (2)
-
Rene de Visser -
Simon Peyton-Jones