我可以借助Template Haskell创建数据haskell吗?数据如:
data Shape = Circle [Float] Double Int
我想编写一个程序,创建数据然后使用它
答案 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