2016-03-25 66 views
1

我可以通過模板Haskell創建數據haskell。數據,如:如何通過模板創建數據Haskell

data Shape = Circle [Float] Double Int 

我想編寫一個程序,它創建數據,然後使用它

+0

嘗試,並提供一個工作示例(它不需要編譯)以上的情況下激勵的問題。 – hao

+0

@haoformayor我實際上認爲他的問題很好地制定了,編寫任何模板Haskell是一個很大的負擔....很少有可用的信息。花了我好幾天才能寫出最簡單的工作片段。 – jamshidh

+0

只要把它放在splice中:'[d |數據Shape = Circle [Float] Double Int |]'將會執行該操作。 – user2407038

回答

1

下面是一個小例子(對不起,我從來沒有想出如何使模板哈斯克爾看起來很漂亮)。 ...

首先,創建一個庫文件(這不是可選的,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 
相關問題