Могу ли я создать данные haskell с помощью 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") []
]
[]
]
Затем, используйте его как этот
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
Try и обеспечивают рабочий пример (не нужно компилировать!) Или больше контекста, чтобы мотивировать вопрос. – hao
@haoformayor На самом деле я думаю, что его вопрос хорошо сформулирован, и писать любой шаблон Haskell довольно тяжело ... Существует очень мало информации. Мне потребовались несколько дней, прежде чем я смог написать даже самый простой рабочий фрагмент. – jamshidh
Просто положите его в сращивание: '[d | data Shape = Circle [Float] Double Int |] 'будет делать трюк. – user2407038