
Well, for the case, we even do not need RankNTypes, as the type of the list is known, so newtype Wrap = Wrap { unwrap :: [Wrap] -> Wrap } wself (h:t) = unwr $ unwr h t will work, which is not too far from encoding function into data :-) This solution saves space, of course. Best regards, Dušan On 03/07/2014 10:35 AM, Tobias Brandt wrote:
The problem is, that the type parameter 'a' of the functions in the list is fixed. You can work around that with RankNTypes:
newtype Wrap = Wrap { unwrap :: forall a. [a] -> a }
unwrap $ (\(h:t) -> (unwrap h) t) [Wrap head, Wrap last]
This specializes the type of the functions at every point of use separately.
On 7 March 2014 09:14, Kolář Dušan
mailto:kolar@fit.vutbr.cz> wrote: Well my fault, the example should have been like this:
We have and error of infinite type for Prelude> :t ((\(h:t) -> h t) [head, last, head, last, head, last])
Of course, head and tail are incompatible on type level...
Dušan
On Fri, 07 Mar 2014 07:57:09 +0100, Kolář Dušan
mailto:kolar@fit.vutbr.cz> wrote: : :
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?
It seems like you need heterogenous collections[0]
Regards, Henk-Jan van Tuyl
[0] http://www.haskell.org/haskellwiki/Heterogenous_collections
-- Folding@home What if you could share your unused computer power to help find a cure? In just 5 minutes you can join the world's biggest networked computer and get us closer sooner. Watch the video. http://folding.stanford.edu/
http://Van.Tuyl.eu/ http://members.chello.nl/hjgtuyl/tourdemonad.html Haskell programming --
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org mailto:Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe