After a little too long trying, I managed to get code from which the type system will infer that type, without using 'undefined': *Main> :t map map :: ((a -> a1) -> [a]) -> [a1] import System.IO.Unsafe import Data.IORef import Prelude hiding (map) import qualified Prelude as P coerce a = unsafePerformIO (coerce' a) where ref = unsafePerformIO $ newIORef [] coerce' a = do writeIORef ref [a] b <- readIORef ref return (head b) map' a2b f = P.map a2b (f a2b) map = map' coerce On 27/05/07, Stefan Holdermans <stefan@cs.uu.nl> wrote:
map :: ((a -> b) -> [a]) -> [b]
I am not following here: what do you mean? Clearly, this is not a valid typing for map. Moreover, modulo undefinedness, there are no functions with this typing.
map _ = []
Ah, well, and that one, of course... :-)
Cheers,
Stefan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe