@hackage / g2q

G2Q allows constraint programming, via writing Haskell predicates.

Latest0.1.0.0

About

Metadata

  • Last updated , by WilliamHallahan
  • License BSD-3-Clause
  • Maintained by: william.hallahan@yale.edu

  • Lottery factor: 0

Links

Installation

Readme

G2Q


About

G2Q allows constraint programming, via writing Haskell predicates. A quasiquoter, g2, is provided which can take concrete arguments at runtime, and solve for unknown symbolic arguments.

For example, to find inputs from a list xs which sum to a given number n, you can write:

sumToN :: Int -> [Int] -> IO (Maybe [Int])
sumToN = [g2| \(n :: Int) (xs :: [Int]) ->
              ?(ys :: [Int])
            |  sum ys == n
            && all (\e -> e `elem` xs) ys
            && length ys >= 1 |]