
MH
data Container a = Many a(Container a)
but here is what I don't understand (fyi, I am a beginner) how can you construct this container? I can do
let a = Many "somestring" - and I will get back a function but I can not do let a = Many 'a' "somestring" - because the second param is not (Container a) type.
Right, so you need to pass a 'Container a' for that parameter.
let a = Many 'a' (Container ['a','a']) - doesn't work either because Container is a type not a constructor (right or I am missing something?).
It doesn't work because the Container parameter must be of the same type. The parameters here are Char (due to the 'a' as the first parameter to Many), and [Char] (due to the ['a','a'] given as parameter to the Container parameter. These are not the same, so it fails.
So I have two questions: 1. When I do let b = Many "somestring" , I get :t b b :: Container[Char] -> Container[Char] what is it and why I am allowed to pass just one parameter to Many (and how can I use it)?
This is just partial application. Pass one more parameter to build the whole thing.
2. How can you construct that container? data Container a = Many a(Container a) let a = ????
Well you need a 'Container a' to do it. So you can do for instance: let a = Container 'x' a or let b = Conainer 'y' undefined -k -- If I haven't seen further, it is by standing in the footprints of giants