2016-03-25 2 views
1

Могу ли я создать данные haskell с помощью Template Haskell. Данные, как:Как создать данные по шаблону Haskell

data Shape = Circle [Float] Double Int 

Я хочу написать программу, которые создают данные, а затем использовать его

+0

Try и обеспечивают рабочий пример (не нужно компилировать!) Или больше контекста, чтобы мотивировать вопрос. – hao

+0

@haoformayor На самом деле я думаю, что его вопрос хорошо сформулирован, и писать любой шаблон Haskell довольно тяжело ... Существует очень мало информации. Мне потребовались несколько дней, прежде чем я смог написать даже самый простой рабочий фрагмент. – jamshidh

+0

Просто положите его в сращивание: '[d | data Shape = Circle [Float] Double Int |] 'будет делать трюк. – user2407038

ответ

1

Вот минимальный пример (к сожалению, я никогда не понял, как сделать шаблон 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 
Смежные вопросы