1
我可以通過模板Haskell創建數據haskell。數據,如:如何通過模板創建數據Haskell
data Shape = Circle [Float] Double Int
我想編寫一個程序,它創建數據,然後使用它
我可以通過模板Haskell創建數據haskell。數據,如:如何通過模板創建數據Haskell
data Shape = Circle [Float] Double Int
我想編寫一個程序,它創建數據,然後使用它
下面是一個小例子(對不起,我從來沒有想出如何使模板哈斯克爾看起來很漂亮)。 ...
首先,創建一個庫文件(這不是可選的,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
嘗試,並提供一個工作示例(它不需要編譯)以上的情況下激勵的問題。 – hao
@haoformayor我實際上認爲他的問題很好地制定了,編寫任何模板Haskell是一個很大的負擔....很少有可用的信息。花了我好幾天才能寫出最簡單的工作片段。 – jamshidh
只要把它放在splice中:'[d |數據Shape = Circle [Float] Double Int |]'將會執行該操作。 – user2407038