Re: [Haskell-cafe] Re: Top Level etc.

2005-01-20 Thread Ben Rudiak-Gould
Jim Apple wrote:
 Does anyone have examples of these? This one scares the foo out of me:

 * It's not even safe in general to add a signature giving the same type
 that the compiler would infer anyway
Here's an example:
len :: [a] - Int
   
len xs = let ?accum = 0 in len' xs
   
len' [] = ?accum
len' (x:xs) = let ?accum = ?accum + (1::Int) in len' xs
   *Main :t len'
   len' :: forall a. (?accum :: Int) = [a] - Int
   *Main len hello
   0
len :: [a] - Int
   
len xs = let ?accum = 0 in len' xs
   
len' :: forall a. (?accum :: Int) = [a] - Int
   
len' [] = ?accum
len' (x:xs) = let ?accum = ?accum + (1::Int) in len' xs
   *Main :t len'
   len' :: forall a. (?accum :: Int) = [a] - Int
   *Main len hello
   5
This happens as a side effect of the way that type inference currently 
works on recursive binding groups. It happens with typeclass 
dictionaries too, but it isn't observable because they can't be rebound 
in a local scope.

-- Ben
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Top Level etc.

2005-01-20 Thread Keean Schupke
Ben Rudiak-Gould wrote:
len :: [a] - Int
   
len xs = let ?accum = 0 in len' xs
   
len' :: forall a. (?accum :: Int) = [a] - Int
   
len' [] = ?accum
len' (x:xs) = let ?accum = ?accum + (1::Int) in len' xs
   *Main :t len'
   len' :: forall a. (?accum :: Int) = [a] - Int
   *Main len hello
   5
I don't get this. The second answer (the one quoted above) must be wrong...
len' gets a value only in the empty '[]' case. The recursion is such 
that the value
of '?accum' is incremented on the return of the recursively called 
function, therefore
the value of '?accum' in the case '[]' is always zero! How on earth does 
this get
the answer five?

   Keean,
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Top Level etc.

2005-01-19 Thread Ashley Yakeley
In article [EMAIL PROTECTED],
 Benjamin Franksen [EMAIL PROTECTED] wrote:

 Please note that implicit parameters -- at least as currently implemented in 
 GHC -- have a number of severe problems. A good summary was given by Ben 
 Rudiak-Gould in 
 http://www.mail-archive.com/haskell%40haskell.org/msg15595.html (although in 
 a different context):

This is mostly ambiguity due to missing type-signatures, isn't it? 
That's not so severe in my view. But maybe the compiler can issue a 
warning in such cases.

-- 
Ashley Yakeley, Seattle WA

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Top Level etc.

2005-01-19 Thread Jim Apple
Benjamin Franksen wrote:
Please note that implicit parameters -- at least as currently implemented in 
GHC -- have a number of severe problems.
Does anyone have examples of these? This one scares the foo out of me:
* It's not even safe in general to add a signature giving the same type
that the compiler would infer anyway
Jim
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe