summaryrefslogtreecommitdiff
path: root/testsuite/tests/rebindable/rebindable8.hs
blob: 2c1f484f47ac2899b11c44ff7527fd5159c038a8 (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
{-# LANGUAGE RebindableSyntax, MultiParamTypeClasses #-}

-- Trac #1537

module Foo where
import Prelude hiding (Monad(..))

class Bind m1 m2 m3 where 
  (>>=) :: m1 a -> (a -> m2 b) -> m3 b

class Return m where
  return :: a -> m a
  fail   :: String -> m a 

instance Bind Maybe [] [] where
  Just x  >>= f = f x
  Nothing >>= f = []

instance Return [] where 
  return x = [x]
  fail _   = [] 

should_compile :: [Int]
should_compile = do 
  a <- Just 1
  [a]