如何通过模板创建数据 Haskell

How can I create Data by Template Haskell

我可以在模板 Haskell 的帮助下创建数据 haskell 吗?数据如:

data Shape = Circle [Float] Double Int

我想写一个程序,创建数据然后使用它

这是一个最小的例子(抱歉,我一直不知道如何使模板 haskell 看起来漂亮)......

首先,创建一个库文件(这不是可选的,TH 要求您在单独的文件中定义表达式)。

module DataDefinition where

import Language.Haskell.TH

dataDef::DecsQ
dataDef = do
  return $ --the following is the definition "data Shape = Circle Float | Square"
        [DataD 
                [] 
                (mkName "shape") 
                [] 
                [
                        NormalC (mkName "circle") 
                                [(NotStrict, ConT (mkName "Float"))],
                        NormalC (mkName "Square") []
                ] 
                []
        ]

那么,就这样使用吧

module Main where

import DataDefinition

$(dataDef)  --This defines Shape

main = do
  let x = Circle 1.0 --Now you can define and use Shape like any other data def....
  return ()

额外-

您可以使用派生实例填充 DataD 创建中的最后一个空数组....尝试将 [] 更改为

          [mkName "Show"]

并且您可以在 main 中打印输出....

main = do
  let x = Circle 1.0
  print x