On 11/2/06, Sebastian Sylvan <[EMAIL PROTECTED]> wrote:
On 11/2/06, Slavomir Kaslev <[EMAIL PROTECTED]> wrote:

>
> Visible 'subclasses' Show. Doesn't this mean that Visible should be
> defined for all types with Show instances?

No, it just means that any type that you want to instantiate in
Visible needs to also have a Show instance (is this a restriction you
really want? See below).

Well, yes that's what I meant. I want class Visible for objects that
have Show instance and I want to be able to use this Show instance in
the definition of Visible.

Again this is not some practical example, I am just trying to grasp
Haskell classes and instances.


You could do something like

instance Show a => Visible a

(the default implementations that you provided in the class should be
enough, you could possibly move the implementations to the "Show
instance" and remove the Show super class from the Visible class -
then you could make even non-Show types instances of Visible without
having to define their instance for Show as well).

/S


--
Sebastian Sylvan
+46(0)736-818655
UIN: 44640862


This doesn't work either:

import List

class Visible a where
  toString :: a -> String
  size :: a -> Int

instance Show a => Visible a where
   toString = show
   size = length . show

instance Visible a => Visible [a] where
  toString = concat . map toString
  size = foldl (+) 0 . map size

vSort :: (Visible a, Ord a) => [a] -> String
vSort = toString . List.sort

s = vSort [1..3]

gives:

   Illegal instance declaration for `Visible a'
        (The instance type must be of form (T a b c)
         where T is not a synonym, and a,b,c are distinct type variables)
   In the instance declaration for `Visible a'
Failed, modules loaded: none.

at instance Show a => Visible a where.

Probably I should reconsider my expectations? How should something
like this designed?

--
Slavomir Kaslev
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to