Restricted Data Types: A reformulation

Ashley Yakeley ashley at
Wed Feb 8 01:49:53 EST 2006

In article <20060208043444.GI4014 at>,
 John Meacham <john at> wrote:

> Ah. I think I see the objection now. Will have to think about it some.

Here's a simpler example:

  class HasInt a where
      getInt :: a -> Int
  instance HasInt Int where
      getInt = id

  newtype HasInt a => T a = T Int a

  instance Monad T where     -- problem
      return a = T (getInt a) a
      (T i _) >> (T _ b) = T i b

  foo :: (Monad m) => m Int
  foo = (return True) >> (return 3)

  fooT :: T Int
  fooT = foo

Ashley Yakeley, Seattle WA

More information about the Haskell-prime mailing list