[Haskell-cafe] How does one create an input handle bound to a string instead of a file?

Ganesh Sittampalam ganesh at earth.li
Thu Feb 28 14:40:06 CET 2013


Hi John,

Using bytestring-handle, you can get this with something like

stringHandle :: String -> Handle
stringHandle s = readHandle False (Data.ByteString.Char8.pack s)

[note the complete disregard of encoding issues in the use of
Data.ByteString.Char8]

Cheers,

Ganesh

On 28/02/2013 13:32, John D. Ramsdell wrote:
> I think I wasn't clear about my question.  I want something that
> creates a value of type System.IO.Handle.  You see, I have a high
> performance S-expression parser that I'd like to use in GHCi reading
> strings while at the command loop.
> 
> Here is more details on my module SExpr that exports the SExpr data
> type and the load function.  The desired function is called
> stringHandle.
> 
> -- An S-expression
> data SExpr
>     = S String                 -- A symbol
>     | Q String                 -- A quoted string
>     | N Int                    -- An integer
>     | L [SExpr a]              -- A proper list
> 
> -- Read one S-expression or return Nothing on EOF
> load :: Handle -> IO (Maybe (SExpr Pos))
> 
> In GHCi, I want to type something like:
> 
> SExpr> let h = stringHandle "()"
> SExpr> load h
> Just (L [])
> SExpr> load h
> Nothing
> SExpr>
> 
> It seems to me right now that I have to implement a duplicate parser
> that implements Read.  At least S-expression parsing is easy.
> 
> John
> 
> On Thu, Feb 28, 2013 at 3:02 AM, Ganesh Sittampalam <ganesh at earth.li> wrote:
>> Hi,
>>
>> On 27/02/2013 20:38, John D. Ramsdell wrote:
>>> How does one create a value of type System.IO.Handle for reading that
>>> takes its input from a string instead of a file?  I'm looking for the
>>> equivalent of java.io.StringReader in Java.  Thanks in advance.
>>
>> http://hackage.haskell.org/package/bytestring-handle can make handles
>> that read and write to ByteStrings.
>>
>> Cheers,
>>
>> Ganesh
>>
>>
> 




More information about the Haskell-Cafe mailing list