[Haskell-cafe] named pipe interface

Steffen Schuldenzucker sschuldenzucker at uni-bonn.de
Thu Jan 12 20:44:27 CET 2012


On 01/12/2012 07:53 PM, Serge D. Mechveliani wrote:
> [...]
 >
> For the "to-A" part writen in C  (instead of Haskell), this interface
> loop works all right.
> With Haskell, I manage to process only a single string in the loop,
> and then it ends with an error.
>
> Main.hs  is given below.
>
> I never dealt with such an IO in Haskell.
> Can you, please, fix the code or give comments?
>
> Please, copy the response to  mechvel at botik.ru
> (I am not in the list).
>
> [...]
> -------------------------------------------------------------------
> import System.IO (IOMode(..), IO(..), Handle, openFile, hPutStr,
>                                                hGetLine, hFlush)
> import System.IO.Unsafe (unsafePerformIO)
>
> dir = showString "/home/mechvel/ghc/axiomInterface/byLowerLevel/"
>
> toA_IO   = openFile (dir "toA")   WriteMode    :: IO Handle
> fromA_IO = openFile (dir "fromA") ReadMode
>                                             -- used as global values
> toA   = unsafePerformIO toA_IO             --
> fromA = unsafePerformIO fromA_IO           --
>
> axiomIO :: String ->  IO String
> axiomIO str = do
>                hPutStr toA str
>                hFlush toA
>                hGetLine fromA
>
> axiom :: String ->  String ->  String
> axiom str =  showString (unsafePerformIO $ axiomIO str)
>
> -- Examples of usage --------------------------------------------

tl;dr, but did you try to write your program without using 
unsafePerformIO? It's "considered harmful" for a reason.

Cheers, Steffen



More information about the Haskell-Cafe mailing list