2016-03-25 15 views
1

Template Haskellの助けを借りてデータhaskellを作成できますか?データは次のように:テンプレートでデータを作成するにはどうすればいいですか?

data Shape = Circle [Float] Double Int 

私は、データを作成して(申し訳ありませんが、私はテンプレートのHaskellはきれいに見えるようにする方法を考え出したことがありません)、それは

+0

が質問をやる気にさせる作業例(それはコンパイルする必要はありません!)以上のコンテキストを試して、提供しています。 – hao

+0

@haoformayor私は実際に彼の質問がうまく定式化されていると思うし、Template Haskellを書いているのはかなり負担です....利用できる情報はほとんどありません。最も簡単な作業スニペットを書くこともできるようになるまでには数日かかりました。 – jamshidh

+0

スプライスの中に入れるだけです。 '[d | data 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") [] 
       ] 
       [] 
     ] 

、あなたが変更してみてください....インスタンスを導出してDATAD作成におけるその最後の空の配列を埋めることができ、この

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() 

体外

のようにそれを使用します[]

あなたがメインで出力を印刷することができます....

main = do 
    let x = Circle 1.0 
    print x 
関連する問題