## 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 |]
```