
Hello Café, Is there any way to overcome this other way then by introducing some helper data types etc. etc.? We have: Prelude> :t ([head, last, head, last, head, last]) ([head, last, head, last, head, last]) :: [[a] -> a] Prelude> :t (\(h:t) -> head t) (\(h:t) -> head t) :: [a] -> a Prelude> :t ((\(h:t) -> head t) [head, last, head, last, head, last]) ((\(h:t) -> head t) [head, last, head, last, head, last]) :: [a] -> a But we have an error of infinite type construction for Prelude> :t ((\(h:t) -> h t) [head,tail, head, tail, head, tail]) Well I can overcome this by encoding functions into data types and then performing "conversion" back and forth, nevertheless, is there any way how to overcome this? My real problem is not about head/tail, but head/tail is the simplest way how to explain. Thanks for any references, Dušan