IO in the middle

Serge D. Mechveliani mechvel at botik.ru
Thu Nov 17 14:19:50 CET 2011


People,

is it possible to arrange a connected output and input (with something 
like a socket) "in a middle" of the Haskell function?
Consider the example of sorting an integer list:
 
 sortInt :: [Int] -> [Int] 
 sortInt js = 
         let callString = "sortForeign( " ++ (show js) ++ ")" 
             ?      = outputToSocket callStr socket?        -- strict order?
             resStr = inputFromSocket socket?  :: String    -- 
             (res, _) = reads str' :: ([Int], String) 
         in  res

It forms the call string for a foreign function, passes it to a Socket,
the foreign system parses  callString,  evaluates it, and returns the 
string  resStr  for the result (inputFromSocket needs to happen later than 
outputToSocket). Then,  reads  converts it back to [Int].

Forgetting of the pure-functionality philosophy, which items in the Haskell
library or in the GHC library may help? Is the C interface needed?
  
What if there is a  file  instead of socket?
(for this Foreign is able to apply  readFile, to parse and evaluate the 
call).  

I had an experience with  readFile  in Haskell, but this was only the 
top function. Here the situation looks more complex.

Thank you in advance for your explanation.

------
Sergei.
mechvel at botik.ru



More information about the Glasgow-haskell-users mailing list