File: tcfail093.hs

package info (click to toggle)
ghc-testsuite 7.4.1-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 37,872 kB
  • sloc: haskell: 80,712; makefile: 1,805; python: 1,751; ansic: 623; objc: 24; sh: 22; cpp: 2
file content (36 lines) | stat: -rw-r--r-- 1,075 bytes parent folder | download | duplicates (2)
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
{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies,
             FlexibleInstances, UndecidableInstances #-}
-- UndecidableInstances now needed because the Coverage Condition fails

module ShouldFail where

-- A stripped down functional-dependency 
-- example that causes GHC 4.08.1 to crash with:
-- "basicTypes/Var.lhs:194: Non-exhaustive patterns in function readMutTyVar"
-- Reported by Thomas Hallgren Nov 00

-- July 07: I'm changing this from "should fail" to "should succeed"
-- See Note [Important subtlety in oclose] in FunDeps


primDup :: Int -> IO Int
primDup = undefined

dup () = call primDup

-- 	call :: Call c h => c -> h
--
--	call primDup :: {Call (Int -> IO Int) h} => h  with  
--  Using the instance decl gives
--	call primDup :: {Call (IO Int) h'} => Int -> h'
--  The functional dependency means that h must be constant
--  Hence program is rejected because it can't find an instance 
--  for {Call (IO Int) h'}

class Call    c h | c -> h where
    call  :: c -> h

instance Call c h => Call (Int->c) (Int->h) where 
    call f = call . f