The problem is that (cw c) overlaps with String. It will still ovarlap if you use data decl.
it is the CW that needs to be a datatype. See Below:


   Keean.

Graham Klyne wrote:

Hmmm, I'm not sure that I understand what you mean.

Considering my example (repeated below), is it that 'AtomicConcept' should be an algebraic datatype rather than just a type synonym? Or is there more?

Or... I just found John Hughes 1999 paper on Restricted Data Types in Haskell [1], which talks about representing class constraints by the type of its associated dictionary. Is this is what you mean?

#g
--

[1] http://www.cs.chalmers.se/~rjmh/Papers/restricted-datatypes.ps

spike-overlap-ConceptExpr.lhs
-----------------------------

> type AtomicConcepts a  = [(AtomicConcept,[a]    )]
> type AtomicRoles a     = [(AtomicRole   ,[(a,a)])]
>
> type TInterpretation a = ([a],AtomicConcepts a,AtomicRoles a)

> class (Eq c, Show c) => ConceptExpr c where
>     iConcept          :: Ord a => TInterpretation a -> c -> [a]

...

> type AtomicConcept = String   -- named atomic concept

Declare AtomicConcept and AtomicRole as instances of ConceptExpr and RoleExpr
(AtomicRole is used by AL, and including AtomicConcept here for completeness).


> instance ConceptExpr AtomicConcept where
>     iConcept = undefined

...

To allow a common expression to support multiple description logics,
we first define a wrapper class for DLConcept and DLRole:

> class ConceptExpr c => ConceptWrapper cw c | cw -> c where
>     wrapConcept :: c -> cw c -> cw c
>     getConcept  :: cw c -> c

Do this: data CW cw = CW cw class ConceptWrapper cw c | cw -> c wrapConcept :: c -> (CW cw) c -> (CW cw) c getConcept :: (CW cw) c -> c


Using this, a ConceptWrapper can be defined to be an instance of ConceptExpr:

This is line 30:

> instance (ConceptWrapper cw c, ConceptExpr c) => ConceptExpr (cw c) where
> iConcept = iConcept . getConcept


instance ConceptWrapper (CW cw) c,ConceptExpr c) => ConceptExpr ((CW cw) c) where

Error message:
Reading file "D:\Cvs\DEV\HaskellDL\spike-overlap-conceptexpr.lhs":
ERROR "D:\Cvs\DEV\HaskellDL\spike-overlap-conceptexpr.lhs":30 - Overlapping inst
ances for class "ConceptExpr"
*** This instance : ConceptExpr (a b)
*** Overlaps with : ConceptExpr AtomicConcept
*** Common instance : ConceptExpr [Char]


_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to