
Sorry again fo the long break, and thanks for explanation. Three Questions: 1.) Because (->) is defined with itself, it is also a Meta Type Constructor (TYPE == variable Rank Type == a Meta Type ?) 2.) How do I define a function which takes a 3-Kinded Type: let f:: h (g a); f a = a where g * -> * and h (*->*)->*, but it did not work as: h is deduced to be h * -> *. Prelude> let f:: h (g a); f a = a <interactive>:42:18: error: • Couldn't match type ‘h’ with ‘(->) (g a)’ ‘h’ is a rigid type variable bound by the type signature for: f :: forall (h :: * -> *) (g :: * -> *) a. h (g a) at <interactive>:42:5-15 Expected type: h (g a) Actual type: g a -> g a • The equation(s) for ‘f’ have one argument, but its type ‘h (g a)’ has none • Relevant bindings include f :: h (g a) (bound at <interactive>:42:18) What can I do? 3.) Is there any tool in Haskel where I can see which function parameter is bound to the given input, for instance something like a function showBinds: showBinds const (\c -> "s") (\(b,c) -> "c") Prelude> Param a gets (\c -> "s") b gets (\(b,c) -> "c") This is a simple example, but it gets more complicated with massive use of autocurrying. On 11/25/2017 05:39 PM, Francesco Ariis wrote:
On Sat, Nov 25, 2017 at 04:19:04PM +0100, Marcus Manning wrote:
But why I can call g with Just:
let g :: h a b -> h a b; g a = a
g Just
but Just is a->Maybe a Because (->) is a type constructor itself, just with convenient infix syntax:
λ> :k (->) (->) :: TYPE q -> TYPE r -> *
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners