Hi Jason,

To help me understand your question, would you be unhappy with the following
structure?

    -- runnable
    main = interact f
    -- composable
    f = ...

The discipline is to use interact (or another combinator) to wrap a
functional/composable/pure component like f into an executable.  Then give
main to users and f to programmers.  This same game can be made more
sophisticated, eg

    main = interact (show . f . read)

Or unparse & parse in place of show & read.

For more on combining usability and composability, see

    http://haskell.org/haskellwiki/TV

http://conal.net/blog/posts/tangible-functional-programming-a-modern-marriage-of-usability-and-composability/

    - Conal

On Tue, Nov 4, 2008 at 4:12 PM, Jason Dusek <[EMAIL PROTECTED]> wrote:

>  Informally, a "pure program" an executable such that the
>  stream of bytes entering it totally determines the stream of
>  bytes leaving it.
>
>  Many useful programs that I would like to write in Haskell
>  don't fall into this category -- for example, network servers
>  -- but a lot of their components do. Can these components can
>  be Haskell functions without IO in their signatures?
>
>  Though that seems reasonable, it is not, in general, true. For
>  example,    System.Info.os    is generally treated as pure,
>  though it is not. It's not clear to me how to disambiguate
>  these "born again" values from really pure values.
>
> --
> _jsn
> _______________________________________________
> Haskell-Cafe mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to