如何通过模板Haskell创建数据

时间:2016-03-25 17:32:09

标签: haskell template-haskell

我可以借助Template Haskell创建数据haskell吗?数据如:

data Shape = Circle [Float] Double Int

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

1 个答案:

答案 0 :(得分:1)

这是一个最小的例子(对不起,我从未弄清楚如何使模板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 = do
  let x = Circle 1.0
  print x