summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_compile/T18920.hs
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])