Proposal: Add concatMapM function (#2042)
rl at cse.unsw.edu.au
Sun Feb 3 20:18:43 EST 2008
Aaron Denney wrote:
> On 2008-02-01, Roman Leshchinskiy <rl at cse.unsw.edu.au> wrote:
>> Aaron Denney wrote:
>>> On 2008-02-01, Roman Leshchinskiy <rl at cse.unsw.edu.au> wrote:
>>>> Bulat Ziganshin wrote:
>>>>> the right way to deal with "modifiers" is to attach them to the Handle
>>>>> itself like this:
>>>>> f <- openFile "name" >>= withLocking >>= withEncoding utf8
>>>> IMO, global state is never "the right way" if it can be avoided. It will
>>>> always lead to problems. Especially in a functional language like Haskell.
>>> This isn't global state, but local to the handle, and only affects where
>>> the handle is passed in. It's just extending an opaque data type.
>> If I can destructively change the encoding assocated with a Handle, then
>> it's global state.
> Right. But the example given doesn't necessarily have that.
> x <- [5, 6] >>= (return .) (+ 1)
> No modification is going on, but return of new values.
True, but that is a very obfuscated way of doing this. If the handle is
not modified destructively, then there is no need for withLocking etc.
to be monadic.
More information about the Libraries