Могу ли я создать data haskell с помощью Template Haskell. Такие данные:
data Shape = Circle [Float] Double Int
Я хочу написать программу, которая создает данные, а затем использует их.
Могу ли я создать data haskell с помощью Template 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
[d| data Shape = Circle [Float] Double Int |]
сделает свое дело. - person user2407038   schedule 26.03.2016