blob: e529b920d2644cd2e8e7e10470e145985f82c9b9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE GADTs #-}
module T18920 where
import Data.Kind
class Monad solver => Solver solver where
type Constraint solver :: Type
type Label solver :: Type
class Queue q
data Tree s a where
NewVar :: Term s t => (t -> Tree s a) -> Tree s a
class Solver solver => Term solver term
class Transformer t where
type EvalState t :: Type
type TreeState t :: Type
type ForSolver t :: (Type -> Type)
type ForResult t :: Type
nextT :: SearchSig (ForSolver t) q t (ForResult t)
returnT :: ContinueSig solver q t (ForResult t)
type ContinueSig solver q t a =
( Solver solver, Queue q, Transformer t )
=> Int -> q -> t -> EvalState t
-> solver (Int, [a])
type SearchSig solver q t a =
(Solver solver, Queue q, Transformer t )
=> Int -> Tree solver a -> q -> t -> EvalState t -> TreeState t
-> solver (Int,[a])
|