1
Template Haskellの助けを借りてデータhaskellを作成できますか?データは次のように:テンプレートでデータを作成するにはどうすればいいですか?
data Shape = Circle [Float] Double Int
私は、データを作成して(申し訳ありませんが、私はテンプレートのHaskellはきれいに見えるようにする方法を考え出したことがありません)、それは
Template 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") []
]
[]
]
、あなたが変更してみてください....インスタンスを導出して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
が質問をやる気にさせる作業例(それはコンパイルする必要はありません!)以上のコンテキストを試して、提供しています。 – hao
@haoformayor私は実際に彼の質問がうまく定式化されていると思うし、Template Haskellを書いているのはかなり負担です....利用できる情報はほとんどありません。最も簡単な作業スニペットを書くこともできるようになるまでには数日かかりました。 – jamshidh
スプライスの中に入れるだけです。 '[d | data Shape = Circle [Float] Double Int |] 'はトリックを行います。 – user2407038