Re: [Haskell-cafe] using ghc as a library
On Mon, Oct 27, 2008 at 3:23 PM, Thomas Schilling [EMAIL PROTECTED] wrote: Not at the moment. I was thinking about abstracting out the finder, which might be useful for other things, too. Can you maybe describe your actual goal? Adding an import foo/bar would not parse, so you must have some kind of preprocessing going on, so you might be able to insert some dummy imports there which you then have to provide. E.g.: import foo/bar.hs ~~ import CafeF00d.Foo.Bar, and you then copy (or symlink) foo/bar.hs to CafeF00d/Foo/Bar.hs. You can put those into a special directory which you prepend to the list of searched directories. Well my immediate goal was to see if i can make a generic build system ala ruby's rake or rant in haskell. But the overall goal was to understand how the compiler works and what i can do with it. I hate gui's so i prefer having a interface to my programs that's as expressive as the language that they are written in, and being typesafe is always nice :). I think you suggestion on using the preprocessor is an excellent idea, and should at least get me there. Can you point me to some documentation on what gcc expects from the preprocessor? Does it basically expect something that has the same interface as cpp? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] using ghc as a library
GHC contains its own preprocessor, it just needs to be activated using -cpp on the command line or {-# LANGUAGE CPP #-} inside the file. However, I wasn't suggesting that. I was suggesting that before you hand the input to the ghc api, you substitute all occurences of import foo by something that the haskell parser understands. 2008/10/28 Anatoly Yakovenko [EMAIL PROTECTED]: On Mon, Oct 27, 2008 at 3:23 PM, Thomas Schilling [EMAIL PROTECTED] wrote: Not at the moment. I was thinking about abstracting out the finder, which might be useful for other things, too. Can you maybe describe your actual goal? Adding an import foo/bar would not parse, so you must have some kind of preprocessing going on, so you might be able to insert some dummy imports there which you then have to provide. E.g.: import foo/bar.hs ~~ import CafeF00d.Foo.Bar, and you then copy (or symlink) foo/bar.hs to CafeF00d/Foo/Bar.hs. You can put those into a special directory which you prepend to the list of searched directories. Well my immediate goal was to see if i can make a generic build system ala ruby's rake or rant in haskell. But the overall goal was to understand how the compiler works and what i can do with it. I hate gui's so i prefer having a interface to my programs that's as expressive as the language that they are written in, and being typesafe is always nice :). I think you suggestion on using the preprocessor is an excellent idea, and should at least get me there. Can you point me to some documentation on what gcc expects from the preprocessor? Does it basically expect something that has the same interface as cpp? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] using ghc as a library
On Tue, Oct 28, 2008 at 2:34 AM, Thomas Schilling [EMAIL PROTECTED] wrote: GHC contains its own preprocessor, it just needs to be activated using -cpp on the command line or {-# LANGUAGE CPP #-} inside the file. However, I wasn't suggesting that. I was suggesting that before you hand the input to the ghc api, you substitute all occurences of import foo by something that the haskell parser understands. Thanks a lot for your help. I am trying your suggestion at the moment. Anatoly ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] using ghc as a library
I'm not quite sure what you are trying to do. But for what it's worth, you can load a specific file via setTarget [Target (TargetFile foo/blah.hs) True Nothing] see http://code.haskell.org/~nominolo/html/ghc/GHC.html#v%3AsetTargets Here're GHC's current haddocks (for HEAD): http://code.haskell.org/~nominolo/html/ghc/frames.html 2008/10/27 Anatoly Yakovenko [EMAIL PROTECTED]: Hi, Anatoly Sorry for don't answering your question in the first place, but for this kind of tasks I believe you might be better off using some lightweight wrapper of the GHC Api. thanks, that's really cool, but I am trying to figure out a way to embed haskell into another program so i can control and configure it using haskell. I managed to get farther by using the GHC api's that manipulate the ModuleInfo structure, but I am kind of stuck right now trying to figure out how to allow different scripts import each other. The problem is that i dont wan't to have to structure the input scripts as I would a regular haskell project. I basically want to be able to do import foo/blah.hs and read the blah.hs file directly. Any ideas? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] using ghc as a library
On Mon, Oct 27, 2008 at 3:27 AM, Thomas Schilling [EMAIL PROTECTED] wrote: I'm not quite sure what you are trying to do. But for what it's worth, you can load a specific file via setTarget [Target (TargetFile foo/blah.hs) True Nothing] right, but I cant do that from inside a module in place of an import. Is there any way to for me to somehow tell ghc, or my wrapper, that I want to load a module from a specific directory, regardless of what the current include flags are? Anatoly ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] using ghc as a library
Not at the moment. I was thinking about abstracting out the finder, which might be useful for other things, too. Can you maybe describe your actual goal? Adding an import foo/bar would not parse, so you must have some kind of preprocessing going on, so you might be able to insert some dummy imports there which you then have to provide. E.g.: import foo/bar.hs ~~ import CafeF00d.Foo.Bar, and you then copy (or symlink) foo/bar.hs to CafeF00d/Foo/Bar.hs. You can put those into a special directory which you prepend to the list of searched directories. I still can't see a good use case for this, though. 2008/10/27 Anatoly Yakovenko [EMAIL PROTECTED]: On Mon, Oct 27, 2008 at 3:27 AM, Thomas Schilling [EMAIL PROTECTED] wrote: I'm not quite sure what you are trying to do. But for what it's worth, you can load a specific file via setTarget [Target (TargetFile foo/blah.hs) True Nothing] right, but I cant do that from inside a module in place of an import. Is there any way to for me to somehow tell ghc, or my wrapper, that I want to load a module from a specific directory, regardless of what the current include flags are? Anatoly ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] using ghc as a library
On Oct 25, 2008, at 8:39 PM, Anatoly Yakovenko wrote: so I am trying to figure out how to use ghc as a library. following this example, http://www.haskell.org/haskellwiki/GHC/As_a_library, i can load a module and examine its symbols: [...] given Test.hs: module Test where hello = hello world = world one = 1 two = 2 i get this output: $ ./Main ./Test.hs [] [Test.hello, Test.one, Test.two, Test.world] which is what i expect. My question is, how do manipulate the symbols exported by Test? Is there a way to test the types? lets say i wanted to sum all the numbers and concatenate all the strings in Test.hs, how would i do that? Hi, Anatoly Sorry for don't answering your question in the first place, but for this kind of tasks I believe you might be better off using some lightweight wrapper of the GHC Api. For instance, using http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hint you write: import Language.Haskell.Interpreter.GHC import Control.Monad.Trans ( liftIO ) import Control.Monad ( filterM ) test_module = Test main :: IO () main = do s - newSession withSession s $ do loadModules [test_module]-- loads Test.hs... setTopLevelModules [test_module] -- ...and puts it in scope setImports [Prelude] -- put the Prelude in scope too -- exports - getModuleExports Test -- get Test's symbols let ids = [f | Fun f - exports] -- strings - filterM (hasType [Char]) ids conc - concat `fmap` mapM (\e - interpret e infer) strings liftIO $ putStrLn conc -- ns - filterM (hasType Integer) ids sum_ns - sum `fmap` mapM (\e - interpret e (as :: Integer)) ns liftIO $ putStrLn (show sum_ns) hasType :: String - Id - Interpreter Bool hasType t e = do type_of_e - typeOf e return (type_of_e == t) $ ./Main helloworld 3 The version in hackage of hint works only with GHC 6.6.x and 6.8.x, mind you, but a new version is coming soon Good luck, Daniel ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] using ghc as a library
Hi, Anatoly Sorry for don't answering your question in the first place, but for this kind of tasks I believe you might be better off using some lightweight wrapper of the GHC Api. thanks, that's really cool, but I am trying to figure out a way to embed haskell into another program so i can control and configure it using haskell. I managed to get farther by using the GHC api's that manipulate the ModuleInfo structure, but I am kind of stuck right now trying to figure out how to allow different scripts import each other. The problem is that i dont wan't to have to structure the input scripts as I would a regular haskell project. I basically want to be able to do import foo/blah.hs and read the blah.hs file directly. Any ideas? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Using GHC as a library?
Hello, I am reading 1) http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/API 2) http://haskell.org/haskellwiki/GHC/As_a_library Conceptually by allowing importation of GHC itself into a problem is this some kind of reification? Kind regards, vasya ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe