... | ... | @@ -21,7 +21,7 @@ zag (Succ t) = snd (zig t) |
|
|
As with many operations on non-regular (or nested) types, `zig` and `zag` need to be polymorphic in the element type. In Haskell 98, the bindings of the two functions are interdependent, and thus constitute a single binding group. When type inference is performed on this group, `zig` may be used at different types, because it has a user-supplied polymorphic signature. However, `zag` may not, and the example is rejected, unless we add an explicit type signature for `zag`.
|
|
|
|
|
|
|
|
|
However GHC, Hugs and Nhc98 follow the suggestion of Mark Jones in [ Typing Haskell in Haskell](http://www.cse.ogi.edu/~mpj/thih/), that the dependency analysis should ignore references to variables that have an explicit type signature. Hence `zag` does not depend on `zig`, and we can infer the type
|
|
|
However GHC, Hugs, Nhc98, and jhc follow the suggestion of Mark Jones in [ Typing Haskell in Haskell](http://www.cse.ogi.edu/~mpj/thih/), that the dependency analysis should ignore references to variables that have an explicit type signature. Hence `zag` does not depend on `zig`, and we can infer the type
|
|
|
|
|
|
```wiki
|
|
|
zag :: BalancedTree a -> a
|
... | ... | |