[Haskell-cafe] why are implicit types different? (cleanup)

S. Alexander Jacobson alex at alexjacobson.com
Tue Nov 28 11:59:01 EST 2006


I ended up solving it by using a typeclass.  My general experience of 
implicit types has been that they end up being a lot less useful than 
they appear.  Getting the types right ends up being difficult and it 
is usually better just to be in a monad or as in this case to use 
typeclasses.  I've begun to think of use of implicit types as a sign a 
"bad smell" in the code and if I have used one somewhere, I try to 
eliminate it because doing so usually results in better code overall.

-Alex-

______________________________________________________________
S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com






On Tue, 28 Nov 2006, Simon Peyton-Jones wrote:

> | So I guess the real question is, how do I pass a polytype* wpn?
>
> and the answer is:
>
> | On Mon, 27 Nov 2006, Simon Peyton-Jones wrote:
> |
> | > Implicit parameters have monotypes, not polytypes.
>
> So an implicit parameter never has a polymorphic type.  You can get around this, as Ben suggested I think, by using a newtype to wrap it up:
>
>    newtype WPN = WPN (forall a. Ev PassNet ev a -> Ev State ev a)
>
> Simon
>
> So ?f in g gets
> | > type (Char->Char).  I rather doubt that something more general
> | > (implicit parameters get polytypes) would work, given the implicit
> | > "improvement" rules that implicit parameters require.
> | >
> | > Simon
> | >
> | > | -----Original Message-----
> | > | From: haskell-cafe-bounces at haskell.org [mailto:haskell-cafe-bounces at haskell.org] On Behalf Of
> | S.
> | > | Alexander Jacobson
> | > | Sent: 21 November 2006 19:28
> | > | To: haskell-cafe at haskell.org
> | > | Subject: [Haskell-cafe] why are implicit types different? (cleanup)
> | > |
> | > |
> | > |
> | > | Why do g and g' have different types?
> | > |
> | > |    g x y = let ?f = \x-> x in ?f x ++ (show (?f y))
> | > |    g  :: [Char] -> [Char] -> [Char]
> | > |
> | > |    g' :: (Show t) => [Char] -> t -> [Char]
> | > |    g' x y = let f = \x-> x in f x ++ (show (f y))
> | > |
> | > | Is there a way I can use implicit types and let g be as general as g'?
> | > |
> | > | -Alex-
> | > |
> | > |
> | > | ______________________________________________________________
> | > | S. Alexander Jacobson tel:917-770-6565 http://alexjacobson.com
> | > | _______________________________________________
> | > | Haskell-Cafe mailing list
> | > | Haskell-Cafe at haskell.org
> | > | http://www.haskell.org/mailman/listinfo/haskell-cafe
> | >
>



More information about the Haskell-Cafe mailing list