[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