content: ;;; Tests for quote, quasiquote, unquote, and unquote-splice.
  
  (module Main)
  
  (import Language.Finkel)
  
  (= f1 arg
    (print ['a 'b arg 'd]))
  
  (= f2 arg
    (print `(a b ,arg d)))
  
  (= f3 arg
    (print `(a b ,@arg d)))
  
  (= f4 arg
    (print `(கிழக்கு බටහිර ,arg Βόρειος)))
  
  (:: main (IO ()))
  (= main
    (do
      ;; "'foo" is same as "(:quote foo)".
      (print 'foo)
      (print (:quote foo))
  
      ;; Quotes can nest.
      (print ''foo)
      (print '''foo)
  
      ;; Quoting literals
      (print '"string")
      (print '42)
      (print '1.23)
      (print '#'c)
      (print '[1 2 3])
      (print '())
  
      ;; Quoting reserved symbols
      (print 'case)
      (print 'class)
      (print 'data)
      (print 'default)
      (print 'do)
      (print 'foreign)
      (print 'infix)
      (print 'infixl)
      (print 'infixr)
      (print 'instance)
      (print 'let)
      (print 'newtype)
      (print 'type)
      (print '!)
      (print '->)
      (print '..)
      (print '::)
      (print '<-)
      (print '=)
      (print '=>)
      (print '@)
      (print '{) (print '})
      (print '|)
      (print '~)
      (print '_)
      (print 'forall)
      (print 'anyclass)
      (print 'as)
      (print 'family)
      (print 'hiding)
      (print 'stock)
      (print 'via)
      (print 'qualified)
      (print ':quote)
      (print '(deriving))
      (print '(import))
      (print '(module))
      (print '(where))
  
      ;; Quoting pragmas
      (print '(UNPACK))
      (print '(OVERLAPPABLE))
      (print '(OVERLAPPING))
      (print '(OVERLAPS))
      (print '(INCOHERENT))
  
      ;; Quoting doc comments
      (print '(:doc "xxxx"))
      (print '(:doc^ "xxxx"))
      (print '(:doc$ key "xxxx"))
      (print '(:dh1 "xxxx"))
      (print '(:dh2 "xxxx"))
      (print '(:dh3 "xxxx"))
      (print '(:dh4 "xxxx"))
  
      ;; Quasiquote.
      (print `foo)
      (print (:quasiquote foo))
  
      (f1 'foo)
      (f2 'foo)
      (f3 '(foo bar buzz))
      (f3 '[\x \y \z])
      (f3 ['foo 'bar 'buzz])
      (f4 'みなみ)))
  