<div dir="ltr">Also there is good article by Chris Done: <a href="http://chrisdone.com/posts/data-typeable">http://chrisdone.com/posts/data-typeable</a>. Hope this will be helpful.<br></div><br><div class="gmail_quote">вт, 19 мая 2015 г. в 5:20, Adam Bergmark <<a href="mailto:adam@bergmark.nl">adam@bergmark.nl</a>>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Using GHC Generics: <a href="http://hackage.haskell.org/package/generic-deriving-1.7.0/docs/Generics-Deriving-ConNames.html" target="_blank">http://hackage.haskell.org/package/generic-deriving-1.7.0/docs/Generics-Deriving-ConNames.html</a><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 19, 2015 at 1:29 AM, Tikhon Jelvis <span dir="ltr"><<a href="mailto:tikhon@jelv.is" target="_blank">tikhon@jelv.is</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>You can get this information through the Data.Data module. There are two typeclasses which can be (have to be, I believe) derived for your data type, Data and Typeable. The Data class lets you access a representation of your type including type constructors.<br><br></div>To set this up, you need to import Data.Data and enable the DeriveDataTypeable extension:<br><br>    {-# LANGUAGE DeriveDataTypeable #-}<br>    import Data.Data<br><br>    data Codes = A0100A | A0500A deriving (Show, Data, Typeable) <br><br></div>Now you can get a representation of the type:<br>    <br>    λ> dataTypeOf (undefined :: Codes)<br>    DataType {tycon = "Main.Codes", datarep = AlgRep [A0100A,A0500A]}<br><br></div>Since your type is an algebraic data type (AlgRep), the DataRep contains its constructors, which you can inspect with functions from the Data.Data module.<br></div><div class="gmail_extra"><br><div class="gmail_quote"><span>On Mon, May 18, 2015 at 4:20 PM, Cody Goodman <span dir="ltr"><<a href="mailto:codygman.consulting@gmail.com" target="_blank">codygman.consulting@gmail.com</a>></span> wrote:<br></span><div><div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Can I use either template Haskell, GHC Generics, or something else to<br>
get the list of Constructors in Codes? Then I could do `map show<br>
codeSumTypeMembers` and get `["A0100A","A0500A"]`?<br>
<br>
Here's an example of solving this problem manually:<br>
<br>
data Codes = A0100A | A0500A deriving Show<br>
<br>
codeExists "A0100A" = True<br>
codeExists "A0500A" = True<br>
codeExists _ = False<br>
<br>
<br>
main = print $ codeExists xmlElementName<br>
       where xmlElementName = "A0500A"<br>
<br>
-- λ> main<br>
-- True<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div></div></div><br></div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div>