Hi Philip,<br><br><div class="gmail_quote">On Wed, Aug 29, 2012 at 12:01 PM, Philip Holzenspies <span dir="ltr"><<a href="mailto:pkfh@st-andrews.ac.uk" target="_blank">pkfh@st-andrews.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Dear GHCers,<br>
<br>
I'm performing traversals over GHC-API results (HsSyn et al). For this purpose, I'm using SYB generics.<br>
<br>
I found that I couldn't use "ext1Q" for a function with type "Data x => Bag x -> String", i.e. that this function was never applied. The source of Bag's instance of the Data class seems to explain why:<br>
<br>
<br>
instance Data a => Data (Bag a) where<br>
gfoldl k z b = z listToBag `k` bagToList b -- traverse abstract type abstractly<br>
toConstr _ = abstractConstr $ "Bag("++show (typeOf (undefined::a))++")"<br>
gunfold _ _ = error "gunfold"<br>
dataTypeOf _ = mkNoRepType "Bag"<br>
<br>
<br>
Is there a rationale to not allow gunfolds and to keep toConstr abstract?</blockquote><div><br>As far as I understand, this is to keep `Bag` itself abstract, preventing users from inspecting its internals.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
More to the point for my needs, is there a reason to not allow dataCast1 casting of Bags?<br></blockquote><div><br>That is a separate issue; I believe this instance is just missing a `dataCast1 = gcast1` line.<br>All datatypes of kind `* -> *` should have such a definition.<br>
<br>(Having a look at Data.Data, I guess the same applies to `Ptr a` and `ForeignPtr a`.<br>And `Array a b` seems to be missing the `dataCast2` method. I propose fixing all of these.)<br><br><br>Cheers,<br>Pedro<br> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Regards,<br>
Philip<br>
_______________________________________________<br>
Glasgow-haskell-users mailing list<br>
<a href="mailto:Glasgow-haskell-users@haskell.org">Glasgow-haskell-users@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users" target="_blank">http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</a><br>
</blockquote></div><br>