parenlog.ss
#lang scheme
(require (for-syntax syntax/parse)
         "core.ss")

(define-syntax (:- stx)
  (raise-syntax-error ':- "Cannot be used outside define-model" stx))

(define-syntax (paren-stmt->rule stx)
  (syntax-parse
   stx
   #:literals (:-)
   [(_ (:- head body-query ...+))
    (syntax/loc stx
      (make-rule 'head
                 (list (compile-query body-query)
                       ...)))]
   [(_ head)
    (syntax/loc stx
      (make-rule 'head empty))]))

(define-syntax (define-model stx)
  (syntax-parse
   stx
   [(_ model:id paren-stmt ...)
    (syntax/loc stx
      (define model
        (make-model
         (list (paren-stmt->rule paren-stmt)
               ...))))]))

(define-syntax (query-model stx)
  (syntax-parse 
   stx
   [(_ model:expr options ... query)
    (syntax/loc stx
      (query-model* model options ...
                    (compile-query query)))]))

(provide define-model
         query-model
         :-
         model?)