<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto">You probably mean<div><br></div><div>newtype Expr = Expr (ExprG Expr)</div><div><br><div id="AppleMailSignature" dir="ltr">Az iPademről küldve</div><div dir="ltr"><br>2018. dec. 14. dátummal, 14:08 időpontban Tobias Brandt <<a href="mailto:to_br@uni-bremen.de">to_br@uni-bremen.de</a>> írta:<br><br></div><blockquote type="cite"><div dir="ltr">
  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  
  
    <p>Hello, <br>
    </p>
    <p>my adhoc solution would be to add a type parameter:</p>
    <p>data ExprG a = Var String<br>
        | Enclosed String a String<br>
        | Prefix a a <br>
        | Ternary a String a String a deriving Show<br>
      <br>
      <br>
      type Expr = ExprG (ExprG ())<br>
      <br>
      type ExprL = ExprG [Expr]<br>
      <br>
    </p>
    <p>Cheers,</p>
    <p>Tobias<br>
    </p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 12/14/18 1:56 PM, ducis wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:28219dbc.af97.167acca2714.Coremail.ducis_cn@126.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial">
        <div>Hello,<br>
          <br>
          Say I have a certain type for parse trees:<br>
          data Expr = Var String</div>
           | Enclosed String Expr String<br>
           | Prefix Expr Expr<br>
           | Ternary Expr String Expr String Expr<br>
           deriving (Show,Eq,Ord,Generic)--,Typeable)<br>
        <div><br>
          Then I want a new type where every occurence of "Expr"
          definition changed to "[Expr]":<br>
          data ExprL = VarL String<br>
        </div>
           | EnclosedL String [Expr] String<br>
           | PrefixL [Expr] [Expr]<br>
           | TernaryL [Expr] String [Expr] String [Expr]<br>
           deriving (Show,Eq,Ord,Generic)<br>
        <div><br>
          Sometimes, I also want to use a DList instead of list.<br>
        </div>
        data ExprD = VarD String<br>
           | EnclosedD String (DList Expr) String<br>
           | PrefixD (DList Expr) (DList Expr)<br>
           | TernaryD (DList Expr) String (DList Expr) String (DList
        Expr)<br>
           deriving (Show,Eq,Ord,Generic)<br>
        <div><br>
          They have exactly the same structure, is there a way to unify
          the three definitions into one?<br>
          Furthurmore, is it possible to generalise the latter two for
          all Functors ?<br>
          <br>
          Thanks,<br>
          ducis<br>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
<a class="moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
Only members subscribed via the mailman list are allowed to post.</pre>
    </blockquote>
  

</div></blockquote><blockquote type="cite"><div dir="ltr"><span>_______________________________________________</span><br><span>Haskell-Cafe mailing list</span><br><span>To (un)subscribe, modify options or view archives go to:</span><br><span><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a></span><br><span>Only members subscribed via the mailman list are allowed to post.</span></div></blockquote></div></body></html>