如何通过模板创建数据 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
我可以在模板 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