packages feed

huff-0.1.0.0: examples/BlocksWorld.hs

{-# LANGUAGE QuasiQuotes #-}

module Main where

import Huff

[huff|

  domain BlocksWorld {

    object Obj = A | B | C | Table

    predicate on(Obj,Obj), clear(Obj)

    operator MoveTo(b: Obj, x: Obj, y: Obj) {
      requires: on(b,x), clear(b), clear(y)
      effect:   on(b,y), clear(x), !clear(y)
    }

    operator MoveToTable(b: Obj, x: Obj) {
      requires: on(b,x), clear(b)
      effect:   on(b,Table), clear(x)
    }
  }

|]

main =
  do mb <- findPlan $ blocksWorld [ on A Table, on B Table, on C Table
                                  , clear A, clear B, clear C ]
                                  [ on A B, on B C ]

     print mb