Skip to content

bogus "syntactically distinct contexts" error

{-# LANGUAGE TypeOperators, FlexibleContexts
  , MultiParamTypeClasses, FunctionalDependencies
  , TypeFamilies
  -- , ScopedTypeVariables
  #-}

-- The ScopedTypeVariables is there just as a bug work-around.  Without:
-- 
--     Mutually dependent functions have syntactically distinct contexts
--     When matching the contexts of the signatures for
--       dZero :: forall b a s.
--                (AdditiveGroup b, HasBasis a s, HasTrie (Basis a)) =>
--                a :> b
--       pureD :: forall b a s.
--                (AdditiveGroup b, HasBasis a s, HasTrie (Basis a)) =>
--                b -> a :> b
--     The signature contexts in a mutually recursive group should all be identical
--     When generalising the type(s) for dZero, pureD
-- 
-- This bug was introduced between ghc 6.9.20080622 and 6.10.0.20081007.

{-# OPTIONS_GHC -fno-warn-missing-methods #-}


import Control.Applicative

class AdditiveGroup v where
  zeroV   :: v
  (^+^)   :: v -> v -> v
  negateV :: v -> v

class AdditiveGroup v => VectorSpace v s | v -> s where
  (*^)  :: s -> v -> v


-- | Mapping from all elements of @a@ to the results of some function
class HasTrie a where
    data (:->:) a :: * -> *

instance HasTrie a => Functor ((:->:) a)

instance HasTrie a => Applicative ((:->:) a)

class VectorSpace v s => HasBasis v s where
  type Basis v :: *

-- | Linear map, represented a as a memo function from basis to values.
type u :-* v = Basis u :->: v

data a :> b = D { powVal :: b, derivative :: a :-* (a :> b) }

dZero :: (AdditiveGroup b, HasBasis a s, HasTrie (Basis a)) => a:>b
dZero = pureD zeroV

pureD :: (AdditiveGroup b, HasBasis a s, HasTrie (Basis a)) => b -> a:>b
pureD b = b `D` pure dZero
Trac metadata
Trac field Value
Version 6.11
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC conal
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information