[Haskell-cafe] Re: [Haskell] Top Level <-
Lennart Augustsson
lennart at augustsson.net
Thu Aug 28 13:31:19 EDT 2008
I don't think anyone has claimed that any interface can be implemented
without globals.
Of course some can't (just pick an interface that is the specification
of a global variable).
What I (and others) claims is that such interfaces are bad. Using a
global variable makes an assumption that there's only ever going to be
one of something, and that's just an inflexible assumption to make.
You think global variables are essential, I think they are a sign of
bad design. So we have different opinions and neither one of us is
going to convince the other.
I think a lot of things related to the IO monad in Haskell is bad
design; influenced by imperative thinking.
For instance, I think the main function should have a type like
main :: (IOMonad io) => io a
where IOMonad contains some basic functionality like calling C.
Then you could do things like implement runInsandboxIO which traces all C calls.
-- Lennart
On Thu, Aug 28, 2008 at 5:26 PM, Adrian Hey <ahey at iee.org> wrote:
> Jonathan Cast wrote:
>>
>> On Thu, 2008-08-28 at 10:00 +0100, Adrian Hey wrote:
>>>
>>> Lennart Augustsson wrote:
>>> > I don't don't think global variables should be banned, I just think
>>> > they should be severly discouraged.
>>>
>>> If you're saying a language should not provide a sound way to do
>>> this (as I believe you are), then AFAICT for all practical purposes
>>> you *are* saying you think global variables should be banned.
>>>
>>> Where are we going to be if the unsafePerformIO hack ever becomes
>>> *really* unsafe?
>>>
>>> and..
>>>
>>>> I'm certain you can write a kernel in Haskell where the only use of
>>>> global variables is those that hardware interfacing forces you to use.
>>>
>>> But what you haven't explained is why this is even desirable? I don't
>>> doubt it's true in an academic sense if you don't mind sacrificing
>>> safety
>>
>> What `safety' is being sacrificed?
>>
>>> and modularity.
>>
>> What modularity?
>
> As I've pointed out several times already you can find simple examples
> in the standard haskell libs. So far nobody has accepted my challenge to
> re-implement any of these "competantly" (I.E. avoiding the use of global
> variables).
>
> Why don't you try it with Data.Unique and find out :-)
>
> Regards
> --
> Adrian Hey
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
More information about the Haskell-Cafe
mailing list