[Haskell-cafe] Top Level etc.
Ashley Yakeley
ashley at semantic.org
Wed Jan 19 06:52:00 EST 2005
In article <41EE22BE.80302 at imperial.ac.uk>,
Keean Schupke <k.schupke at imperial.ac.uk> wrote:
> Do you think implicit parameters could replace
> top-level-things-with-identity?
>
> I hadn't really thought of it before (and I don't use implicit
> parameters much).
Yes, but I think people are clamouring for
top-level-things-with-identity because they don't like implicit
parameters. Not me, though.
I have been musing on the connection between data-types, modules,
classes, and implicit parameters, and wondering if there might be some
grand scheme to tie it all together. For instance, a module is very
similar to class with no type parameters and all members defined. You'll
notice that class members have different declared types inside and
outside the class:
class C a where
foo :: a -> a -- inside
foo :: (C a) => a -> a -- outside
Perhaps one could have top-level implicit parameters (or top-level
contexts in general):
module (?myvar :: IORef Int) => Random where
random :: IO Int -- inside
random = do
i <- readIORef ?myvar
...
writeIORef i'
return i'
module (?myvar :: IORef Int) => MyMain where
import Random
-- random :: IO Int -- also inside
mymain :: IO ()
mymain = do
...
i <- random
...
module Main where
import MyMain
-- mymain :: (?myvar :: IORef Int) => IO () -- outside
main = do
var <- newIORef 1 -- initialisers in the order you want
let ?myvar = var in mymain
--
Ashley Yakeley, Seattle WA
More information about the Haskell-Cafe
mailing list