I would like to be able to write an IO-action, which would return a polymorphic function, which could be used for different values, but it seems I can't. Can anyone help me doing that please?
f :: a -> Bool
f _ = True
getF :: Int -> (a -> Bool)
getF _ = f
getFIO :: IO (a -> Bool)
getFIO = return f
main :: IO ()
main = do
-- this works
print ((f :: Int -> Bool) (10::Int))
print ((f :: String -> Bool) "asd")
-- this works
let f' = getF 10
print (f' (10::Int))
print (f' "asd")
-- this doesn't
f'' <- getFIO
print (f'' (10::Int))
print (f'' "asd")
-- but this does
f''' <- getFIO
print (f''' (10::Int))
f'''' <- getFIO
print (f'''' "asd")
return ()