[Haskell-cafe] Get number of fields for non-record ADTs using Data type class?

Li-yao Xia lysxia at gmail.com
Mon Oct 29 20:34:41 UTC 2018


This maps every field to 1, and folds them together using (+):

     Data.Data.gmapQl (+) 0 (const 1) :: T -> Int

(There has to be a similarly easy solution using GHC.Generics instead 
but I can't think of one...)

Li-yao

On 10/29/18 2:56 PM, Markus Läll wrote:
> Dear list,
> 
> Is it possible te get the number of fields for data constructors for a 
> plain ADT, i.e something with no record fields? E.g for
> 
> data T = A Int Double | B String (Maybe String)
> 
> it would give 2 for both `A` and `B`.
> 
> For a record it's possible using the `constrFields` function from Data.Data.
> 
> I was trying to follow this tutorial by Christopher Done 
> https://chrisdone.com/posts/data-typeable, and I feel that it must be 
> possible somehow to get these numbers with the gmap*/gfold* functions, 
> but the use of them is over my head at the moment.
> 
> 
> Best,
> 
> 
> 
> -- 
> Markus Läll
> 
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
> 


More information about the Haskell-Cafe mailing list