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