Haskell: Get data constructor name as string
deriving, generic-programming, ghc, haskell, reflection
Solution
Found the solution myself, but leaving this question to help others:
import Data.Data
data D = X Int | Y Int Int deriving (Data,Typeable)
let result = show $ toConstr (X 3) -- result contains what we wanted
Problem
Let us say we have ``` data D = X Int | Y Int Int | Z String ``` I wish to have a function `getDConst` ``` getDConst :: D -> String ``` that returns either "X", "Y", or "Z", according to the data constructor used for its input. Is there a generic way to write this without having to do `case` on every data constructor? (I am ok with solutions relying on `Data.Typeable` or something similar)