Re: [Haskell-cafe] Quick-check: how to generate arbitrary complex data?
Am 07/12/2013 09:18 AM, schrieb Roman Cheplyaka: > QuickCheck's Gen is a functor. So you can generate a list, and then > use fmap to add a hash to it. > > instance Arbitrary HashedList where > arbitrary = addHashToList <$> arbitrary > This requires HashedList to be a new type, right? So far my code only used type synonyms. Does this mean I have to convert type synonyms into types in order to use QuickCheck? Does this mean I have to "plan for QuickCheck" when I design my types? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Quick-check: how to generate arbitrary complex data?
Hello all, I have a type ("Mail") which consists of hash and a list, where the hash keeps some redundant data of the list for faster access. I can add and remove elements to values of this type using custom functions, called push and pop. Now I wanted to write some quick checks, but I have no clue how to generate arbitrary values of this type. It will certainly no suffice to write arbitrary instances for the underlying types (Int and Char), because the hash and the list need to be synchronized. Currently "Mail" it is only a type synonym. I suppose as a prerequisite I need to wrap it into a type constructor. But then what? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] GSoC - A Cabal Project
Hi, I am proposing a GSoC project on Cabal. It aims to open up the dependency solver for debugging purposes. The details are here: https://gist.github.com/mr-/7995081f89cff38e9443 I would really like to hear what you think about it. Best regards, Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] What pattern is this (Something.T -> IO a) in Sound.ALSA.Sequencer
On Sunday, 3. March 2013 21:11:21 Roman Cheplyaka wrote: > Admittedly, programming with callbacks is not very pleasant. So we have > an excellent alternative — the continuation monad transformer! > > This nested code > > something1 $ \x -> do > something2 $ \y -> do > something3 $ \z -> do > > can be equivalently rewritten as this linear code > > import Control.Monad.Cont > > flip runContT return $ do > x <- ContT something1 > y <- ContT something2 > z <- ContT something3 > lift $ do > ... Mind-blowing. Thanks a lot. Before I dig into the continuation monad transformer, one more question (demonstrating my ignorance): The initialization actually starts with main = (do SndSeq.withDefault SndSeq.Block $ \h -> do Client.setName (h :: SndSeq.T SndSeq.DuplexMode) "Haskell-Melody" Port.withSimple h "out" (Port.caps [Port.capRead, Port.capSubsRead, Port.capWrite]) (Port.types [Port.typeMidiGeneric, Port.typeApplication]) $ \p -> do So there are some plain actions like "Client.setName" and "Port.withSimple" before it gets to the next "do" block. How would I write this in ContT style? -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] What pattern is this (Something.T -> IO a) in Sound.ALSA.Sequencer
Hello all, this was previously posted on Haskell Beginners, but only partially answered. In Sound.ALSA.Sequencer, there are a number of functions which together set up a midi environement (client, port, queue). They all have a type, where the last argument has a type like: (something.T -> IO a) i.e. *Main> :t SndSeq.withDefault SndSeq.withDefault :: SndSeq.OpenMode mode => SndSeq.BlockMode -> (SndSeq.T mode -> IO a) -> IO a *Main> :t Port.withSimple Port.withSimple :: SndSeq.T mode -> String -> Port.Cap -> Port.Type -> (Port.T -> IO a) -> IO a *Main> :t Queue.with Queue.with :: SndSeq.T mode -> (Queue.T -> IO a) -> IO a There is example code, where a full setup is created by a number of nested "do" blocks. The repeating pattern there is: something1 $ \x -> do something2 $ \y -> do something3 $ \z -> do What is this all about? I particularly would like to understand, when this parttern is needed and what determines the the number of nested "do" blocks. -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Parser left recursion
On Sunday, 24. February 2013 16:04:11 Tillmann Rendel wrote: > Both approaches are essentially equivalent, of course: Before > considering the very same nonterminal again, we should have consumed at > least one token. I see. Thanks So for the laymen: expr ::= expr "+" expr is a problem, because the parser considers expr again without having consumed any input. expr ::= literal pluses pluses ::= many ("+" expr) is not a problem, because by the time the parser gets to the rightmost expr is has consumes at least one "+". Instead of literal we can put anything which promises not to be left-recursive expr ::= exprNonLr "+" expr exprNonLr := ... As exprNonLr gets more complicated, we may end up with a whole set of nonLr parsers. I wonder if I can enforce the nonNr property somehow, i.e. enforce the rule "will not consider the same nonterminal again without having consumed any input". -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Parser left recursion
On Wednesday, 20. February 2013 09:59:47 Tillmann Rendel wrote: > > So the grammar is: > >Exp ::= Int > > | Exp "+" Exp > > > > My naive parser enters an infinite recursion, when I try to parse "1+2". > > I do understand why: > > > > "hmm, this expression could be a plus, but then it must start with an > > expression, lets check". > > > > and it tries to parse expression again and again considers Plus. > > Indeed. > > > Twan van Laarhoven told me that: > >> Left-recursion is always a problem for recursive-descend parsers. > > Note that the left recursion is already visible in the grammar above, no > need to convert to parser combinators. The problem is that the > nonterminal Exp occurs at the left of a rule for itself. Just a silly quick question: why isn't right-recursion a similar problem? -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Parser left recursion
Thank you very much. To clarify: I am not in need of a parser, I just wanted to understand why left recursion is an issue (that was easy) and what techniques help to circumvent the problem. So your answer was spot-on (though I haven't implemented it yet) On Wednesday, 20. February 2013 09:59:47 Tillmann Rendel wrote: > Hi, > > Martin Drautzburg wrote: > > As an exercise I am writing a parser roughly following the expamples in > > Graham Hutton's book. The language contains things like: > > > > data Exp = Lit Int -- literal integer > > > > | Plus Exp Exp > > So the grammar is: > >Exp ::= Int > > | Exp "+" Exp > > > > My naive parser enters an infinite recursion, when I try to parse "1+2". > > I do understand why: > > > > "hmm, this expression could be a plus, but then it must start with an > > expression, lets check". > > > > and it tries to parse expression again and again considers Plus. > > Indeed. > > > Twan van Laarhoven told me that: > >> Left-recursion is always a problem for recursive-descend parsers. > > Note that the left recursion is already visible in the grammar above, no > need to convert to parser combinators. The problem is that the > nonterminal Exp occurs at the left of a rule for itself. > > One way to fix this problem is to refactor the grammar in order to avoid > left recursion. So let's distinguish "expressions that can start with > expressions" and "expressions that cannot start with expressions": > >Exp-norec ::= Int >Exp-rec ::= Exp-norec > > | Exp-norec "+" Exp-rec > > Note that Exp-rec describes a list of Exp-norec with "+" in-between, so > you can implement it with the combinator many. > > Now if you want to add a rule like > >Exp ::= "(" Exp ")" > > you need to figure out whether to add it to Exp-norec or Exp-rec. Since > the new rule is not left recursive, you can add it to Exp-norec: > >Exp-norec ::= Int > > | "(" Exp-rec ")" > >Exp-rec ::= Exp-norec > > | Exp-norec "+" Exp-rec > > If you implement this grammar with parser combinators, you should be > able to parse "(1+2)+3" just fine. > >Tillmann > > PS. Try adding multiplication to your grammar. You will need a similar > trick to get the priorities right. -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Parser left recursion
Hello all, this was previously asked on haskell-beginners, but only partially answered. As an exercise I am writing a parser roughly following the expamples in Graham Hutton's book. The language contains things like: data Exp = Lit Int -- literal integer | Plus Exp Exp My naive parser enters an infinite recursion, when I try to parse "1+2". I do understand why: "hmm, this expression could be a plus, but then it must start with an expression, lets check". and it tries to parse expression again and again considers Plus. Twan van Laarhoven told me that: > Left-recursion is always a problem for recursive-descend parsers. and suggested to do something like: > parseExp = do > lit <- parseLit > pluses <- many (parsePlusToken *> parseLit) > return (combinePlusesWithLit lit pluses) > > combinePlusesWithLit = foldr Plus -- or foldl This indeed does the trick, but only when the first token is a Lit (literal integer). I then added the possibility to optionally put things in parentheses. But then I cannot parse "(1+2)+3". The original code fails, because "(1+2)" is not a Lit and when I allow an expression as the first argument to "+" I get infinite recursion again. I am generally confused, that saying "a plus expression is an integer followed by many "plus somethings" is not what the language says. So this requires a lot of "paying attention" to get right. I'd much rather say "a plus expression is two expressions with a '+' in between". I do know for sure, that it is possible to parse "(1+2)+3" (ghci does it just fine). But I seem to be missing a trick. Can anyone shed some light on this? -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Text.JSON and utf8
hi, tl;dr: i propose this patch to Text/JSON/String.hs and would like to know why it is needed: @@ -375,7 +375,7 @@ where go s1 = case s1 of - (x :xs) | x < '\x20' || x > '\x7e' -> '\\' : encControl x (go xs) + (x :xs) | x < '\x20' -> '\\' : encControl x (go xs) ('"' :xs) -> '\\' : '"' : go xs ('\\':xs) -> '\\' : '\\' : go xs (x :xs) -> x: go xs i recently stumbled upon CouchDB telling me i'm sending invalid json. i basically read lines from a utf8 file with german umlauts and send them to CouchDB using Text.JSON and Database.CouchDB. $ file lines.txt lines.txt: UTF-8 Unicode text lets take 'ö' as an example. i use LANG=de_DE.utf8 ghci tells > 'ö' '\246' > putChar '\246' ö > putChar 'ö' ö > :m + Text.JSON Database.CouchDB > runCouchDB' $ newNamedDoc (db "foo") (doc "bar") (showJSON $ toJSObject [("test","ö")]) *** Exception: HTTP/1.1 400 Bad Request Server: CouchDB/1.2.1 (Erlang OTP/R15B03) Date: Mon, 11 Feb 2013 13:24:49 GMT Content-Type: text/plain; charset=utf-8 Content-Length: 48 Cache-Control: must-revalidate couchdb log says: Invalid JSON: {{error,{10,"lexical error: invalid bytes in UTF8 string.\n"}},<<"{\"test\":\"\"}">>} this is indeed hex ö: > :m + Numeric > putChar $ toEnum $ fst $ head $ readHex "f6" ö if i apply the above patch and reinstall JSON and CouchDB the doc creation works: > runCouchDB' $ newNamedDoc (db "db") (doc "foo") (showJSON $ toJSObject [("test", "ö")]) Right someRev but i dont get back the ö i expected: > Just (_,_,x) <-runCouchDB' $ getDoc (db "foo") (doc "bar") :: IO (Maybe (Doc,Rev,JSObject String)) > let Ok y = valFromObj "test" =<< readJSON x :: Result String > y "\195\188" > putStrLn y ü apperently with curl everything works fine: $ curl localhost:5984/db/foo -XPUT -d '{"test": "ö"}' {"ok":true,"id":"foo","rev":"someOtherRev"} $ curl localhost:5984/db/foo {"_id":"bars","_rev":"someOtherRev","test":"ö"} so how can i get my precious ö back? what am i doing wrong or does Text.JSON need another patch? another question: why does encControl in Text/JSON/String.hs handle the cases x < '\x100' and x < '\x1000' even though they can never be reached with the old predicate in encJSString (x < '\x20') finally: is '\x7e' the right literal for the job? thanks for reading have fun martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Hint's setImports usage
On 21.12.2012 01:23, Michael Sloan wrote: Yeah, I've run into that too.. It does seem like there ought to be a better way, but in order to get around that, I just define the imports (or generate) "MyPrelude.hs" in the current directory. what do you do with the file then? neither loadModules, setImports, setTopLevelModules helped me :/ have fun martin That file can just consist of "import OtherPackage.MyPrelude". -Michael On Thu, Dec 20, 2012 at 4:12 PM, Martin Hilbig mailto:li...@mhilbig.de>> wrote: oh that's neat! but what to do if MyPrelude is provided by some package? i get this error: module `MyPrelude' is a package module and neither set [languageExtensions := [PackageImports]] nor {-# LANGUAGE PackageImports #-} helps. have fun martin On 21.12.2012 00:55, Michael Sloan wrote: Hello! Try doing this first: loadModules ["My.Module"] You may also need to set the "searchPath" - it defaults to the current director. Another good function to know about is "setTopLevelModules", which is just like using ":load" in ghci - it imports everything in the module, including its imports. So, I often do: loadModules ["MyPrelude"] setTopLevelModules ["MyPrelude"] And stick all of the things that I want to be in scope into "MyPrelude.hs". -Michael On Thu, Dec 20, 2012 at 3:35 PM, Martin Hilbig mailto:li...@mhilbig.de> <mailto:li...@mhilbig.de <mailto:li...@mhilbig.de>>> wrote: hi, how to use Language.Haskell.Interpreter.setImports? i use it like: setImports ["My.Module"] so that my interpreted modules don't need to: import My.Module But i still get: Not in scope: data constructor `MyType' What am i doing wrong? Thanks in advance. have fun martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org <mailto:Haskell-Cafe@haskell.org> <mailto:Haskell-Cafe@haskell.__org <mailto:Haskell-Cafe@haskell.org>> http://www.haskell.org/mailman/listinfo/haskell-cafe <http://www.haskell.org/__mailman/listinfo/haskell-cafe> <http://www.haskell.org/__mailman/listinfo/haskell-cafe <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] Hint's setImports usage
oh that's neat! but what to do if MyPrelude is provided by some package? i get this error: module `MyPrelude' is a package module and neither set [languageExtensions := [PackageImports]] nor {-# LANGUAGE PackageImports #-} helps. have fun martin On 21.12.2012 00:55, Michael Sloan wrote: Hello! Try doing this first: loadModules ["My.Module"] You may also need to set the "searchPath" - it defaults to the current director. Another good function to know about is "setTopLevelModules", which is just like using ":load" in ghci - it imports everything in the module, including its imports. So, I often do: loadModules ["MyPrelude"] setTopLevelModules ["MyPrelude"] And stick all of the things that I want to be in scope into "MyPrelude.hs". -Michael On Thu, Dec 20, 2012 at 3:35 PM, Martin Hilbig mailto:li...@mhilbig.de>> wrote: hi, how to use Language.Haskell.Interpreter.__setImports? i use it like: setImports ["My.Module"] so that my interpreted modules don't need to: import My.Module But i still get: Not in scope: data constructor `MyType' What am i doing wrong? Thanks in advance. have fun martin _ Haskell-Cafe mailing list Haskell-Cafe@haskell.org <mailto:Haskell-Cafe@haskell.org> http://www.haskell.org/__mailman/listinfo/haskell-cafe <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] Hint's setImports usage
ok, i figured it out so far (just after hitting send ;) 'setImports' makes 'My.Modules' stuff available to the interpreted code itself (a call to some of my wrapper functions) but not to my "module My.Interpreted.Module where" which i use via setTopLevelModule ["My.Interpreted.Module"] So i guess there is no way to add the import to the 'My.Interpreted.Module' for convenience. Sorry for the noise. have fun martin On 21.12.2012 00:35, Martin Hilbig wrote: hi, how to use Language.Haskell.Interpreter.setImports? i use it like: setImports ["My.Module"] so that my interpreted modules don't need to: import My.Module But i still get: Not in scope: data constructor `MyType' What am i doing wrong? Thanks in advance. have fun martin ___ 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
[Haskell-cafe] Hint's setImports usage
hi, how to use Language.Haskell.Interpreter.setImports? i use it like: setImports ["My.Module"] so that my interpreted modules don't need to: import My.Module But i still get: Not in scope: data constructor `MyType' What am i doing wrong? Thanks in advance. have fun martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Can Haskell outperform C++?
> Yes, this seems to be a separate disease. Not just using low-level langs, > per se, > but using them for *everything*. I have worked at places in industry where > teams > automatically use C++ for everything. For example, they use it for building > all > complete GUI applications, which surprises me a little bit. I would have > thought > in recent years that almost everyone was using *something* else (Java,Python, > whatever) to do much of the performance-non-critical portions of their > application logic. I think "disease" might be overstating this somewhat :) In defence of using C++ for everything: Interfacing different languages is not exactly trivial, and in some cases, impossible. If you are writing a program or system that has significant performance requirements, you might just be better off doing the whole thing in C/C++ and living with the annoyance of doing GUIs, or whatever, in C++. The overhead of pulling in another language may simply outweigh the convenience. In addition, it's pretty much impossible for me to use Haskell to write portions (or all of) a game that would include a console version. This is largely for build system and platform support issues. Doing everything in C++ is nearly the only option here. This situation could be improved though, by making it far easier to embed Haskell within C/C++. It's not difficult by design, but there are large engineering obstacles in the way, and it's hard to see where the effort to remove these could come from. But then it would be more plausible to argue that people are missing out by not using a mix of C++ and Haskell. Cheers, Sam ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] How to use Jacobian from levmar lib?
hi, i'm using the nice levmar package like this [1]. why is there such a big difference in 'infNorm2E' between using/not using the Jacobian? thanks in advance martin hilbig [1]: http://hpaste.org/68537 ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Data.Array.Accelerate initialization timings
On 20 February 2012 16:39, Paul Sujkov wrote: > Ah, it seems that I see now what's going wrong way. I'm not using the 'run' > function from the CUDA backend, and so by default I guess the code is > interpreted (the test backend used for semantics check). However, it's not > perfectly clear how to use CUDA backend explicitly. Neither the interpreter or the CUDA code are used in your example. Everything in Data.Array.Accelerate are front-end stuff, your arrays are allocated on the host, so it is here there is an inefficiency. The "use" method inserts a statement in the syntax tree generated by the front-end, which the back-end can use as a hint to transfer that array to the GPU, while compiling the rest of the program into CUDA code. The Data.Array.Accelerate.CUDA.run function is the one that actually moves the arrays to the GPU. I haven't tried executing your code and I'm not sure why the front-end is that slow. -- Martin Dybdal ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] implementing a text editor swap file
On Tue, Jan 17, 2012 at 6:24 PM, Erik de Castro Lopo wrote: > Martin DeMello wrote: > >> Further question - my internal data representation is a vector of >> strings (it's a line-based editor). > > String or ByteString or Text? > > If its either of the first two, I think you should definitely look at > Text. Just plain String, mostly because it's what Gtk.Entry works with. I'll take a look at Text. martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] implementing a text editor swap file
On Tue, Jan 17, 2012 at 5:49 PM, Erik de Castro Lopo wrote: > Matthew Farkas-Dyck wrote: > >> http://hackage.haskell.org/package/bytestring-mmap > > Since he's editing text, its a pity there isn't a text-mmap > package :-). Further question - my internal data representation is a vector of strings (it's a line-based editor). Is there a more efficient strategy to keep an mmap buffer in sync with the vector than simply allocating some large fixed size per line? martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] implementing a text editor swap file
Says posix only. But googling for it brought up System.IO.MMap, which does seem to be cross-platform. martin On Tue, Jan 17, 2012 at 5:46 PM, Matthew Farkas-Dyck wrote: > http://hackage.haskell.org/package/bytestring-mmap > > > On 17/01/2012, Martin DeMello wrote: >> I'm writing a gtk2hs-based text editor, and would like to implement >> continuous (swap-file based) autosave the way vim and emacs do it. Any >> suggestions for how to implement this in a cross-platform manner? >> >> Also, is there a library that returns standard config file locations >> on a per-platform basis? >> >> martin >> >> ___ >> 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
[Haskell-cafe] implementing a text editor swap file
I'm writing a gtk2hs-based text editor, and would like to implement continuous (swap-file based) autosave the way vim and emacs do it. Any suggestions for how to implement this in a cross-platform manner? Also, is there a library that returns standard config file locations on a per-platform basis? martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] typeclass and functional dependency problem
I'm writing a Gtk2hs app, and I have several custom widgets that are composite objects represented by records, one field of which is a container widget. I am trying to write a replacement for gtk2hs's boxPackStart boxPackStart :: (BoxClass self, WidgetClass child) => self -> child -> Packing -> Int -> IO () that will accept either a gtk widget or one of my custom widgets to place in the box, and do the right thing. Here's my attempt at it; what I want to know is why the commented out bit didn't work and I had to individually add instances of widgets instead: - -- packable objects class WidgetClass w => Packable a w | a -> w where widgetOf :: a -> w --instance WidgetClass w => Packable w w where --widgetOf = id instance Packable Button Button where widgetOf = id instance Packable Entry Entry where widgetOf = id instance Packable Label Label where widgetOf = id instance Packable Notebook Notebook where widgetOf = id instance Packable HBox HBox where widgetOf = id -- add widget to box boxPackS :: (BoxClass b, WidgetClass w, Packable a w) => b -> a -> Packing -> Int -> IO () boxPackS box child p i = boxPackStart box (widgetOf child) p i - If I try to use instance WidgetClass w => Packable w w where widgetOf = id instead, I get the compilation error Editor.hs:23:10: Functional dependencies conflict between instance declarations: instance Packable PairBox VBox -- Defined at Editor.hs:23:10-30 instance WidgetClass w => Packable w w -- Defined at GuiUtils.hs:13:10-38 even though PairBox does not belong to WidgetClass. martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Twidge using hashtags
Hello! fairly new to twidge. Got it installed and have it setting status etc etc . I'm maintaing a local website supporting the eating of a seasonal pastry in a highly competitve fashion. A race of sorts. The contestant eating the most from january first to good friday wins. To keep the eating as transparent as possible one must report each pastry on the web. However, I feel this is not very 2012. I'm thinking about going about the new version allowing reporting to be done via twitter and picking it up with Twidge. To keep everything as much in the open as possible I'd like to have all contestants twittering the eating of a pastry mentioning the "official twitter account of the website" and throw in a hashtag like #report and then some comment. I'll then read the feed periodically via cron on the server and update the highscore database. Am I making sense? The longer I typed the above the more I started thinkng about just doing something in PHP... Any thoughts? Cheers Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How hard is it to start a web startup using Haskell?
A good compromise might be opa (not used it myself, but I've been reading up on it as a possible candidate for any personal web projects I might want to do). It is not haskell, but it is ML-derived, and specifically for webapps. It has some example apps available, though nothing near the volume of apps rails or django would have. martin On Mon, Dec 26, 2011 at 6:17 PM, Haisheng Wu wrote: > > Turns out that those guys doing start-up with Haskell are already expert at > Haskell. > Hence choosing Haskell is more straightforward. > > I'm thinking of using Haskell since it looks cool and beautiful. > However I have little experience and will move slowly at certain begging > period. > This sounds not good to a startup company. > > Comparing with Django in Python, Rails in Ruby, yesod and snap looks not > that mature. > Also, for instance, I'd like to build up a CRM application company, I > could leverage some open source projects in other languages. In Haskell, we > need to build from scratch basically. > > Appreciate your suggestions/comments. > > -Simon > > > > On Wed, Dec 21, 2011 at 2:30 AM, David Pollak > wrote: >> >> >> >> On Mon, Dec 19, 2011 at 2:36 PM, Yves Parès wrote: >>> >>> > Haskell is a mature platform that provides lots of goodies that I might >>> > otherwise have to write (like the goodies I wrote in Lift including an >>> > Actors library) >>> >>> I don't get it: Actors are at the core of Scala concurrency model, >> >> >> Actors as implemented in the Scala distribution were (and probably still >> are) horrid. They have poor performance, memory retention issues, and an >> overall poor design. When Lift relied on Scala's Actors, a Lift-comet site >> needed to be restarted every few weeks because of pent-up memory issues. On >> the other hand, with Lift Actors, http://demo.liftweb.net has been running >> since July 7th. >> >>> >>> and are expanded for distributed programming through Akka for instance. >> >> >> Actually, no. Scala's Actors are not expanded by Akka (although Akka >> Actors may replace the existing Actor implementation in the Scala library). >> Akka is yet another replacement for Scala's Actor library and Akka's >> distributed capabilities are weak and brittle. Also, Lift's Actor library >> and Martin Odersky's flames about it paved the way for Akka because I took >> the heat that might have driven Jonas out of the Scala community when Akka >> was a small project. >> >>> >>> To me it'd be the other way around: you'd have to develop Actors in >>> Haskell, don't you? >> >> >> I've come to understand that Actors are a weak concurrency/distribution >> paradigm. Anything that has a type signature Any => Unit is not composable >> and will lead to the same kinds of issues that we're looking for the >> compiler in Haskell to help us with (put another way, if you like Smalltalk >> and Ruby, then Actors seem pretty cool.) >> >> On the other hand, many of Haskell's libraries (STM, Iteratees, etc.) have >> a much more composable set of concurrency primitives. >> >>> >>> Or maybe you don't mean the same thing by 'Actor'? >>> >>> >>> 2011/12/19 David Pollak >>>> >>>> On Mon, Dec 19, 2011 at 2:04 AM, Ivan Perez >>>> wrote: >>>>> >>>>> I'm actually trying to make a list of companies and people using >>>>> Haskell >>>>> for for-profit real world software development. >>>>> >>>>> I'd like to know the names of those startups, if possible. >>>> >>>> >>>> I am building http://visi.pro on Haskell. I am doing it for a number of >>>> reasons: >>>> >>>> Haskell is a mature platform that provides lots of goodies that I might >>>> otherwise have to write (like the goodies I wrote in Lift including an >>>> Actors library) >>>> Haskell allows a lot of nice "things" that make building a language and >>>> associated tools easier (like laziness) >>>> Haskell is a filter for team members. Just like Foursquare uses Scala as >>>> a filter for candidates in recruiting, I'm using Haskell as a filter... if >>>> you have some good Haskell open source code, it's a way to indicate to me >>>> that you're a strong developer. >>>> >>>> >&
Re: [Haskell-cafe] If you'd design a Haskell-like language, what would you do different?
On Tue, Dec 20, 2011 at 3:10 PM, Chris Wong wrote: > > Why not expand it even further? > > class Monoid m where > (•) :: m -> m -> m > (∅) :: m > > (∈) :: (Foldable t, Eq a) => a -> t a -> Bool > > (∘) :: (b -> c) -> (a -> b) -> (a -> c) > > (∧) :: Bool -> Bool -> Bool > > etc. > > We can write a whole Haskell library full of these aliases -- > "syntactic-heroin" perhaps? ;) Why would you go that far and still not have → ? (: martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] indentation blues
On Tue, Dec 13, 2011 at 2:34 AM, Adrien Haxaire wrote: > >> Regarding, your question whether this is worth switching from vim to >> emacs. I've been using both editors for some years and I very much >> doubt, that "you wouldn't spend much time learning emacs". If you are >> comfortable with vim, stick with it, unless you are interested in >> Emacs or one of its really great modes: org and auctex/reftex. >> >> Regarding, the vi emulations, I'd say they are nice should you ever >> be forced to use emacs for some time. But I don't recommend them, I've >> tried them all. They are not the real thing. Most of them are vi not >> vim emulators. And they always feel like second class citizens in >> emacs land. YMMW. > > Thanks for your feedback. I've never tried vim so I couldn't tell precisely. > > I thought the emulations were nice enough to save time learning emacs. If > they are second class citizens, I agree it would be wiser to stick with vim > then. yeah, i was assuming the emulations were nice enough to support my vim habits too. if they aren't, not even a good haskell mode would make emacs comfortable enough to use given my years of ingrained vim. martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] indentation blues
The vim autoindent for haskell is really bad :( Is there a better indent.hs file floating around somewhere? Alternatively, is the emacs haskell mode better enough that it's worth my time learning my way around emacs and evil? martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] minor refactoring problem
On Tue, Nov 29, 2011 at 2:54 AM, Martin DeMello wrote: > On Tue, Nov 29, 2011 at 2:29 AM, Holger Siegel > wrote: >> >> fromRawFile, fromSavedFile :: String -> IO [PairBox] >> fromRawFile = mapM (\x -> makePair (x, "")) . lines >> fromSavedFile = mapM makePair . parseFile >> >> setEditor :: Editor -> [PairBox] -> IO () >> setEditor ed = writeIORef ed . V.fromList >> >> importFile, loadFile :: Editor -> String -> IO () >> importFile ed = readfile >=> fromRawFile >=> setEditor >> loadFile ed = readfile >=> fromSavedFile >=> setEditor > > Wow, very nice! First time I've truly grasped what >=> is good for. > I'll need to go see where else I can use it in my code. Quick question: what's the difference between importFile ed = readfile >=> fromRawFile >=> setEditor ed and importFile = readfile >=> fromRawFile >=> setEditor that the former compiles but the latter doesn't? martin > > martin > ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] minor refactoring problem
On Tue, Nov 29, 2011 at 12:55 AM, Stefan Holdermans wrote: > Martin, > >> (The trick with `flip` is tempting, but again at the >> cost of having to peer rather too closely at the implementation of >> processFile when reading the code). > > That "trick" is of course completely orthogonal. One could just as well write: > > processFile :: (String -> [a]) -> (a -> (String, String)) -> Editor -> > String -> IO () > processFile f g ed path = do > s <- readFile path > ps -> mapM (makePair . g) (f s) > es -> return $ V.fromList ps > writeIORef ed es > > importFile = processFile lines (\x -> (x, "")) > loadFile = processFile parseFile id good point :) though i ended up writing a new function parseImport = (map $ \x -> (x, "")) . lines, so that i could drop the second argument and have everything look nice and neat. martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] minor refactoring problem
On Tue, Nov 29, 2011 at 12:35 AM, Stefan Holdermans wrote: > Have you considered abstracting over the bits in which importFile and > loadFile differ? For example: > > processFile :: (String -> IO [PairBox]) -> Editor -> String -> IO () > processFile f ed path = do > s <- readFile path > ps <- f s > es <- return $ V.fromList ps > writeIORef ed es > > importFile = processFile (mapM (\x -> makePair (x, "")) . lines) > loadFile = processFile (mapM makePair . parseFile) This was what I had tried; my issue was that the resulting code looked harder rather than easier to read, so it felt more like golfing than refactoring. > Or, alternatively: > > processFile :: (String -> [a]) -> (a -> IO PairBox) -> Editor -> String -> > IO () > processFile f g ed path = do > s <- readFile path > ps -> mapM g (f s) > es -> return $ V.fromList ps > writeIORef ed es > > importFile = processFile lines (\x -> makePair (x, "")) > loadFile = processFile parseFile makePair This does look significantly nicer - I hadn't thought of splitting it into two functions rather than one, but it makes the code look much less cluttered. (The trick with `flip` is tempting, but again at the cost of having to peer rather too closely at the implementation of processFile when reading the code). Thanks! martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] minor refactoring problem
I have the following functions: makePair :: (String, String) -> IO PairBox parseFile :: String -> [(String, String)] importFile :: Editor -> String -> IO () importFile ed path = do s <- readFile path ps <- mapM (\x -> makePair (x, "")) (lines s) es <- return $ V.fromList ps writeIORef ed es loadFile :: Editor -> String -> IO () loadFile ed path = do s <- readFile path ps <- mapM makePair (parseFile s) es <- return $ V.fromList ps writeIORef ed es The problem is that loadFile and importFile are so similar it seems a shame not to combine them somehow, but anything I can think of doing leaves the code looking more rather than less messy. Any nice ideas? martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANN: OpenCL 1.0.1.3 package
On 17 October 2011 22:47, Judah Jacobson wrote: > On Mon, Oct 17, 2011 at 2:56 AM, Luis Cabellos > wrote: >> >> Other issues to solve, >> How to compile in hackage server to generate documentation online? >> opencl.h isn't in the server so I getting errors. >> > > In my experience, the nicest way to work around this problem is to > just generate the documentation manually and host it somewhere off of > Hackage. http://community.haskell.org/admin/ is a decent place to > host something like this; you end up with a URL > http://projects.haskell.org/yourproject which you can link to from the > .cabal file description. That is an acceptable solution. The documentation of hopencl is now hosted at http://projects.haskell.org/hopencl/ Thanks for the pointer. -- Martin Dybdal ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANN: OpenCL 1.0.1.3 package
On 17 October 2011 11:56, Luis Cabellos wrote: >> My own library is available at https://github.com/HIPERFIT/hopencl and >> will be released on hackage very soon (next week probably). Please >> take a look at it. It is currently tested on x86_64 Linux with both >> the AMD x86/x86_64 bindings and NVIDIAs CUDA bindings. They will >> probably not work on Windows in their present state, and I don't have >> access to a Windows machine to test it on. > > As Jason Dagit say, I put the stdcall call convention option in OpenCL > for windows: > https://github.com/zhensydow/opencl/blob/master/OpenCL.cabal Thanks. I have implemented the same thing in my library now. I would be happy if someone could test that it compiles, and the unit tests runs on a Windows installation. -- Martin Dybdal ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANN: OpenCL 1.0.1.3 package
On 17 October 2011 11:56, Luis Cabellos wrote: > On Thu, Oct 13, 2011 at 9:13 PM, Martin Dybdal wrote: >> My own library is available at https://github.com/HIPERFIT/hopencl and >> will be released on hackage very soon (next week probably). Please >> take a look at it. It is currently tested on x86_64 Linux with both >> the AMD x86/x86_64 bindings and NVIDIAs CUDA bindings. They will >> probably not work on Windows in their present state, and I don't have >> access to a Windows machine to test it on. > > As Jason Dagit say, I put the stdcall call convention option in OpenCL > for windows: > https://github.com/zhensydow/opencl/blob/master/OpenCL.cabal > > Other issues to solve, > How to compile in hackage server to generate documentation online? > opencl.h isn't in the server so I getting errors. For now I have bundled the OpenCL header files with my package. That is not the right way either, as the header files can contain some platform specific information, for instance information about the calling conventions, which would be a way to handle the problem above (and the only way possible with c2hs, as far as I know). -- Martin Dybdal ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] ANN: OpenCL 1.0.1.3 package
On 3 October 2011 12:56, Luis Cabellos wrote: > Hello, all. > I want to show you the OpenCL package. I have done this using Jeff Heard > OpenCLRaw package, but I create a new one due the lack of updates of the > former. > # Where to get it > * Hackage page (http://hackage.haskell.org/package/OpenCL) > * Repository (https://github.com/zhensydow/opencl) > * Bugs (https://github.com/zhensydow/opencl/issues) > * Examples (https://github.com/zhensydow/opencl/tree/master/examples). > # Things: > * I write it's high-level binding to OpenCL libraries, but only because I > added more types to hide most of the alloc/free of the API, and hide the > enums using c2hs enums. > * The worst problem of the OpenCLRaw is the bad types it use, I learn to fix > 32/64 bits issues with c2hs, and test it on linux machines. > * Tested on Linux + NVidia only. > * Jason Dagit is helping with Windows, OSX testing in own fork, also the > call-conv fork in github has changes to work on Windows > Please, Consider it's on experimental status but it works, I need lots of > feedbacks for detect posible errors, > Thanks, Hi everyone I just found this thread today, as I don't read Haskell-cafe that often (too bad, I know). I have been working on a set of OpenCL bindings for the last months myself, which I'm using to implement an OpenCL backend to the Data.Array.Accelerate library. The work is done at the HIPERFIT research center, Uni. Copenhagen. My bindings are even further from the naming conventions of the OpenCL library, but I really can't see the problem with that. People which are used to programming OpenCL from C/C++ might have to learn how the naming conventions of the Haskell library are, but they only need to do this once. When the mapping between the old and the new naming conventions are learned, they will benefit from having a more clean interface for all future times. (No Haskell hacker should have a problem with a steep learning curve.) It is somewhat troubling that we now have five different interfaces to OpenCL (that I know of), and I think we should join efforts and make one library that is as stable as possible. The five libraries are: * OpenCL * OpenCLRaw * HsOpenCL * hopencl * The library presented by Benedict Gaster at AMD (yet to be released) ( http://developer.amd.com/zones/OpenCLZone/publications/assets/MakingOpenCLSimplewithHaskell.pdf ) My own library is available at https://github.com/HIPERFIT/hopencl and will be released on hackage very soon (next week probably). Please take a look at it. It is currently tested on x86_64 Linux with both the AMD x86/x86_64 bindings and NVIDIAs CUDA bindings. They will probably not work on Windows in their present state, and I don't have access to a Windows machine to test it on. -- Martin Dybdal ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Trying to experiment with tangible values using GuiTV
Hello all, I'm very new to Haskell, but still I'd like to play with "tangible values", which I find really intriguing. After getting some kind help in haskell-beginners, I managed to compile and run a small example. Which is as follows: -- {-# LANGUAGE OverlappingInstances, UndecidableInstances , IncoherentInstances, FlexibleContexts , TypeSynonymInstances, FlexibleInstances , MultiParamTypeClasses #-} -- For ghc 6.6 compatibility {-# OPTIONS -fglasgow-exts -fallow-overlapping-instances -fallow-incoherent-instances #-} Some GuiTV examples. See also the examples in TV. import Data.List (sort) -- my addition import Data.Monoid -- end my addition import Interface.TV.UI import Control.Arrow.DeepArrow import Data.FunArr -- TypeCompose import Data.Title -- To pick up the FunArr instance for OFun. import Interface.TV.OFun() reverseT :: CTV (String -> String) reverseT = tv (oTitle "reverse" defaultOut) reverse main = runUI reverseT --- There were some warnings during compilation: - [1 of 1] Compiling Main ( myexample.hs, myexample.o ) myexample.hs:7:11: Warning: -fallow-overlapping-instances is deprecated: use -XOverlappingInstances or pragma {-# LANGUAGE OverlappingInstances #-} instead myexample.hs:7:11: Warning: -fallow-incoherent-instances is deprecated: use -XIncoherentInstances or pragma {-# LANGUAGE IncoherentInstances #-} instead Linking myexample ... martin@martin-desktop:/media/ ext4logicaUnTera/cosas_linux/programs/haskell/TV/examples/src/miejemplo$ ghc --make myexample.hs myexample.hs:7:11: Warning: -fallow-overlapping-instances is deprecated: use -XOverlappingInstances or pragma {-# LANGUAGE OverlappingInstances #-} instead myexample.hs:7:11: Warning: -fallow-incoherent-instances is deprecated: use -XIncoherentInstances or pragma {-# LANGUAGE IncoherentInstances #-} instead - When I run it, I get a little window with the "reverse" title and two textboxes. However, when I write something in the upper box, nothing happens. I must say that when I use runIO instead of runUI in this little program, the interactive program does work. Only the GUI version doesn't. So, the person who helped me (Brandon Allbery) said it's probably because of a GuiTV being a bit too old. He recommended me to ask about the issue here, at haskell-cafe. Any suggestions? Maybe I should use GtkTV istead of GuiTV? Thanks in advance! Martin O.B. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Status of Haskell + Mac + GUIs & graphics
> My conclusion was that GLFW-b (on hackage) is the best we have right > now. I think we could do even better than the C libraries out there > by writing the GLUT/GLFW/etc implementation purely in Haskell. We > already have x11 and gtk bindings for the linux support. We have > win32 api bindings for windows support. What we are lacking is good > low level support for OSX GUI programming. Once we have that it's not > too much of a stretch to use cabal to glue it together into a cross > platform library. I believe that's the right way to go for the long > term. Improving GLFW-b is a good short-term route. I agree with your approach. Although getting a window on screen really isn't much code, so I'd vote for going straight to a Haskell replacement for GLUT et al. > And just to say it one more time, I can use all the help I can get. I don't have much time, but if someone started a github project for a Haskell GLUT replacement I could probably chip in here and there. Ta, Sam ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Status of Haskell + Mac + GUIs & graphics
Is there a library that satisfies 2 of your 3 points? * Works with ghci * Supports OpenGL. I've struggled to get: * A window with opengl * Running interactively from ghci * Working cross platform Anyone know of a solution for that? If there's a library that handles that, then there's at least a sensible base to build a pure functional GUI system on. Cheers, Sam From: haskell-cafe-boun...@haskell.org [mailto:haskell-cafe-boun...@haskell.org] On Behalf Of Conal Elliott Sent: 18 May 2011 00:24 To: Haskell Cafe Subject: [Haskell-cafe] Status of Haskell + Mac + GUIs & graphics I still haven't found any way to do GUIs or interactive graphics in Haskell on a Mac that isn't plagued one or more of the following serious problems: * Incompatible with ghci, e.g., fails to make a window frame or kills the process the second time one opens a top-level window, * Goes through the X server, and so doesn't look or act like a Mac app, * Doesn't support OpenGL. A year or two ago, I put my Haskell GUI & graphics work on hold while waiting & hoping for a functioning pathway to open. So far I haven't heard of one. If anyone has found a solution, I'd love to hear! - Conal ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] List of numbers to list of ranges
All the previous solutions seem to assume that the list of numbers is already sorted. In cases where this assumption cannot be made, an alternative solution is to simply insert the numbers into a diet. eecs.oregonstate.edu/~erwig/papers/abstracts.html#JFP98 eecs.oregonstate.edu/~erwig/diet -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Unix emulation
On Sun, Aug 22, 2010 at 5:04 PM, Stephen Tetley wrote: > Andrew, I was going to chastise you for being the only Windows > developer who has problems with MinGW / MSYS and spreading that > unpleasant internet commodity "FUD". However, I've just gone back to > mingw.org and its gone from "somewhat confusing" circa the last time I > installed (Christmas 2009) to "frankly abysmal". So while is was easy > to install MinGW / MSys a year ago I'll willing concede that it is > difficult now. Agreed. I tried to set up an msys development environment to compile chicken scheme a couple of weeks ago, and, quite frankly, gave up. I settled for installing mingw and putting the mingw bin directory first in my cygwin path. This worked very well indeed, even though it isn't an officially supported chicken build environment, so it's worth experimenting with for haskell as well. (Note that it needs a reboot of windows after setting up the cygwin environment variables; I never figured out why). martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Anything like Mythryx in Haskell?
Mythryl [http://mythryl.org/] is an ML dialect that mostly puts an Algolish syntax and some good posix interoperability atop SML/NJ. More than the language (which doesn't seem to be as tastefully designed as Haskell, particularly in terms of syntax - what do people have against MLish syntax anyway?) I like the goals of the associated Mythryx project [http://mythryl.org/my-Mythryx.html], namely, to develop a well-engineered unixy ecosystem in a strongly typed functional language. Has anyone attempted something like this in Haskell? martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Database.CouchDB broken?
hi, try it this way: http://gist.github.com/501951 note the type annotations and the added req param include_docs=true for getAllDocs. the first error is created by ghci, since it dont know the specific type Database.CouchDB> :t runCouchDB' $ getDoc (db "test") (doc "xyz") runCouchDB' $ getDoc (db "test") (doc "xyz") :: (JSON a) => IO (Maybe (Doc, Rev, a)) but why doesnt it complain about the ambiguous type variable `a', like in `read "124"`? the addition of the include_docs=true request parameter really should be in the getAllDocs function itself. i'll fix this and put it in my own haskell-couchdb repo, as well as the simple bulk and attachment apis i implemented, stay tuned ;) have fun martin On 19.07.2010 19:08, Moritz Ulrich wrote: Hello, I'm currently learning Haskell and I want to write a small tool to collect some data in a CouchDB-Database Sadly, the Database.CouchDB module from hackage (and from git) seems broken. It looks like a bug deep in the JSON handling of the lib. Some examples can be found in this gist: http://gist.github.com/475323 ('test' is a database with two simple documents, the doc with the id '8e9112011580882422393f6291000f7d' exists) I filed an issue, but the maintainer hasn't responded in 5 days. Is there anything I missed? Thanks in advance! ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Actors and message-passing a la Erlang
Not distributed (yet) but concurrent: http://hackage.haskell.org/package/actor The paper " Actors with Multi-headed Message Receive Patterns. COORDINATION 2008<http://www.informatik.uni-trier.de/%7Eley/db/conf/coordination/coordination2008.html#SulzmannLW08>:" describes the design rationale. Cheers, Martin On Sun, Jul 25, 2010 at 10:55 PM, Yves Parès wrote: > Hello ! > > I've been studying Erlang and Scala, and I was wondering if someone has > already implemented an actors and message passing framework for concurrent > and distributed programs in Haskell. > > ___ > 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] Re: Hot-Swap with Haskell
hi, if been thinking about an haskell interpreter to, because of erlang's otp. its syntax is a mess, but its scalability is win. since erlang runs in its vm ("interpreted") is there a need for a real haskell interpreter, or can there be a compiled haskell/otp with hotswapping, scaling and stuff? now back on topic, i wrote "real" haskell interpreter because there is the hint[1] package, which wrappes the ghc api. now i dont know what more the plugin package provides, but i thought hint is like is successor (since lambdabot used plugins and now uses mueval, which in turn uses hint ;). please correct me. have fun martin [1]: http://hackage.haskell.org/package/hint On 16.07.2010 06:06, Andy Stewart wrote: Don Stewart writes: lazycat.manatee: Hi all, I'm research to build a hot-swap Haskell program to developing itself in Runtime, like Emacs. Essentially, Yi/Xmonad/dyre solution is "replace currently executing" technology: re-compile new code with new binary entry when re-compile success $ do save state before re-launch new entry replace current entry with new binary entry (executeFile) store state after re-launch new entry There are some problems with re-compile solution: 1) You can't save *all* state with some FFI code, such as gtk2hs, you can't save state of GTK+ widget. You will lost some state after re-launch new entry. 2) Sometimes re-execute is un-acceptable, example, you running some command in temrinal before you re-compile, you need re-execute command to restore state after re-launch, in this situation re-execute command is un-acceptable. I wonder have a better way that hot-swapping new code without re-compile/reboot. Well, the other approach to reloadable modules, using either object code plugins, or bytecode plugins, giving you module-level granularity. Thanks for your reply. I have read your papers : "Dynamic Application From the Group Up" and "Plugging Haskell In" In "Dynamic Application From the Group Up", you introduction how to use re-compile technology implement source-code level hot-swapping. In "Plugging Haskell In", you introduction to how to buld hot-swapping with object-code level. Yes, Dynamic linking can add new code to a running program, but how to replace existing binding with new ones? Looks you still need some reboot when you do *replace* and not just *add*. Infact, reboot is okay, only problem is *keep state*, some *static state* is easier to re-build, example, if you want restore editor buffer state, you just need save (filepath, cursorPosition), you can re-open file and restore cursor position after reboot process. Difficult is *Stream State*, such as: delete operation in file-manager command running in temrinal network communications in browser It's really difficult to restore those state, and re-execute is un-acceptable sometimes. You can found the screenshot of my project at http://www.flickr.com/photos/48809...@n02/ Currently, the closest library to implement dynamic linking is your plugins package (http://hackage.haskell.org/package/plugins-1.4.1), i really want to write some code to test it, unfortunately, it's broken with Cabal-1.8.0.4 that can't compile with ghc-6.12.x/ghc-6.12.3, can you fix it if you have time? It's so great package... I'm looking for some paper about "Haskell and hot-swapping". Any paper or suggestion are welcome! -- Andy ___ 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] Re: ANNOUNCE: fgl-5.4.2.3
On 12.07.2010 09:25, Ivan Lazar Miljenovic wrote: A couple of points I meant to make here but forgot (I was busy hacking on this and my other three graph-related packages for over a week now, and especially this past weekend it cut into my sleeping...): * Apart from bug-fixes, I don't intend on touching the 5.4 series any more. That said, I believe that this version is suitable for replacing 5.4.2.2 in the platform (what's the process on that?). * After I get my generic graph class sorted out at AusHac this coming weekend, I intend to make a 5.5.0.0 release which extends the classes in this new library; this will probably _not_ be suitable for the platform and is intended to serve as a stepping stone to the replacement library Thomas Bereknyei and I are working on. With that last point: Thomas and I are willing to call this new version/replacement something like "inductive-graphs" if that is the preference of the community. Does anyone know of a website that would let us have a survey we can use to determine which option people would prefer? how about http://doodle.com? have fun, keep hacking. martin Note that even if we give it a new name (rather than just a new major version number), we still intend on using the Data.Graph.Inductive module namespace (as it makes even more sense with the new name), so there will still be clashes between this new version and fgl. Ivan Lazar Miljenovic writes: I'm pleased to present the first new release of fgl [1] since Thomas Bereknyei took over maintaining it from Martin Erwig. [1] http://hackage.haskell.org/package/fgl Before people start panicking, rioting, etc., please check the version number: this is just a bug-fix release, and not the complete re-write version which we've been talking about (since we got a little sidetracked, etc.). As such, the API hasn't changed, and this should fit right in to packages already using fgl (sorry to all those people who followed my advice and put "fgl == 5.4.2.2" in the build-depends fields of their packages' .cabal files, but I didn't expect to make another 5.4.y release). The exact change that has been made is to fix a bug pointed out to me by Tristan Allwood, in that Data.Graph.Inductive.PatriciaTree didn't support multiple edges (and furthermore this wasn't specified in the documentation). This has now been rectified. As an indication of what these changes mean, see this sample call graph produced by my SourceGraph program; when using PatriciaTree from fgl-5.4.2.2 the lines were all the same thickness; now there is among other things a loop of width 32 on getExp and a line of width 7 from getExp to maybeEnt. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
RE: [Haskell-cafe] Re: Float instance of Data.Bits
> Note that the Haskell report does not require IEEE 754 binary encodings. > In fact, it permits 'Float' to be a decimal floating point type. True. Although I don't really understand why? Or rather, I don't understand why it can't be at least slightly more specific and at least state that Float is a 32-bit floating point value and Double is a 64-bit floating point value. The exact handling of various exceptions and denormals tends to vary across hardware, but this at least allows you to get at the representation. I realise it'll be platform-specific (assuming isIEEE returns false), but then so is the behaviour of your code if you don't require IEEE support. ta, Sam ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
RE: [Haskell-cafe] Re: Float instance of Data.Bits
> Some operations wouldn't make much sense with Float, for instance the > 'complement' function. What should it return? Also note that bit > manipulation functions could cover only a small window of the value > range. So it could happen that x .|. y = x, even though y is nonzero. > Also rotation would be a destructive operation. Perhaps I can illustrate this with an example. It's very common with SSE code to interpret a float as both a mask and a number. You can exchange the two freely. For instance, in c-like pseudo code, you can write: float mask = myval == 0 ? 0x : 0x float temp = 5 / myval float result = mask .&. temp Which returns 0 or the result of 5 / myval. Each line above turns into a single sse instruction, and there are no branches. Bit wise operations on Floats should operate as if you had reinterpreted the Float as an unsigned integer. There are plenty of other examples of bit twiddling floats. Floats have a well defined bit representation (if a slightly complex one) so it's perfectly reasonable to be able to manipulate it. A complement operation on a float returns a float, and is well defined, if the output bit pattern is one you want. An alternative way to model this would be to provide ways to reinterpret a float as a word32, which helps enforce static typing. I don't know of any way of doing this in Haskell though. Does that make more sense? Thanks, Sam ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Float instance of Data.Bits
Hi, Is there a particular reason Float, Double, etc do not have instances of Data.Bits in the standard libraries? I note the Haskell 2010 report doesn't include them either. In fact, I'm not actually sure how you'd implement the instance for floating point types without having some kind of compiler-specific extension, or a c-binding. Could anyone fill in my missing knowledge here? Cheers, Sam ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] checking types with type families
On Thu, Jul 1, 2010 at 7:54 PM, Simon Peyton-Jones wrote: > > | Also, what is the difference between fundeps and type families > | wrt local type constraints? I had always assumed them to be > | equivalent, if fully implemented. Similar to logic vs functional > | programming, where Haskellers tend to find the latter more > | convenient. Functional logic programming shows that there > | are some tricks missing if one just drops the logic part. > > Until now, no one has know how to combine fundeps and local constraints. > For example > > class C a b | a->b where >op :: a -> b > > instance C Int Bool where > op n = n>0 > > data T a where >T1 :: T a >T2 :: T Int > > -- Does this typecheck? > f :: C a b => T a -> Bool > f T1 = True > f T2 = op 3 > > The function f "should" typecheck because inside the T2 branch we know that > (a~Int), and hence by the fundep (b~Bool). But we have no formal type > system for fundeps that describes this, and GHC's implementation certainly > rejects it. Martin Sulzmann, Jeremy Wazny<http://www.informatik.uni-trier.de/%7Eley/db/indices/a-tree/w/Wazny:Jeremy.html>, Peter J. Stuckey<http://www.informatik.uni-trier.de/%7Eley/db/indices/a-tree/s/Stuckey:Peter_J=.html>: A Framework for Extended Algebraic Data Types. FLOPS 2006<http://www.informatik.uni-trier.de/%7Eley/db/conf/flops/flops2006.html#SulzmannWS06>: 47-64 describes such a system, fully implemented in Chameleon, but this system is no longer maintained. Type families and Fundeps are equivalent in expressive power and it's not too hard to show how to encode one in terms of the other. Local constraints are an orthogonal extension. In terms of type inference, type families + local constraints and fundeps + local constraints pose the same challenges. Probably, Simon is refrerring to the 'unresolved' issue of providing a System F style translation for fundeps + local constraints. Well, the point is that System FC is geared toward type families. The two possible solutions are (a) either consider fundeps as syntactic sugar for type families (doesn't quite work once you throw in overlapping instances), (b) design a variant System FC_fundep which has built-in support for fundeps. -Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] GHCi and State
hi, On 25.06.2010 11:07, corentin.dup...@ext.mpsa.com wrote: Another couple of reflexions (sorry for monopolizing): 1. Since i am making a Nomic game, players will have to submit rules. These rules will be written in a sub-set of haskell. Instead of writing my own reader/interpreter, i'd like to use GHC to compil them on the fly, and then add them to the current "legislation". What would you suggest me to do that? Any pointers? check out hint, a nice wrapper around the ghc api [1]. have fun martin [1]: http://hackage.haskell.org/package/hint 2. For now, the game is more or less playable in GHCi. But my concern is: When you use GHCi, you are in the IO monad, right? How to had state to this monad? I would like that the player can compose his rule in GHCi, and when he is done, he can submit it in GHCi with something like: *Nomic> submitRule And then the game takes the rule, possibly modify the current legislation, and give the hand back to GHCi. So the "current legislation" has to be a state of the GHCi's loop. Is this possible at all? submitRule would have a type more or less like that (GameState contains the legislation): submitRule :: Rule -> StateT GameState IO () Thanks for your attention! I know this is a bit confused! Best, Corentin ___ 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] Haskell Bangalore
Sure, sounds like fun :) I keep trying to learn Haskell and getting nowhere, but the thing is I keep trying! martin On Mon, Jun 21, 2010 at 10:00 AM, C K Kashyap wrote: > Hi, > I was wondering if it would be a good idea for the folks interested in > Haskell in Bangalore to get together. Especially if there are folks at EGL, > perhaps we could just meet up at pyramid. > I've been trying to learn Haskell for a while and currently am trying to > work through SPJ's "implementation of Functional Programming languages". It > would be good to bounce off ideas (in person) with like minded folks. > -- > Regards, > Kashyap > ___ > 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] When the unknown is unknown
On Thursday, 24. June 2010 00:04:18 Alexander Solla wrote: > On Jun 23, 2010, at 1:50 PM, Martin Drautzburg wrote: > > I said that a rhythm is a series of Moments (or Beats), each > > expressed as > > fractions of a bar. But each Moment also has volume. So I could > > model rhythm > > as Pairs of (Moment, Volume). However I certanly do not want to > > specify both > > the Moments and the Volume, but rather compute one from the other. > > How about something like: > > type RhythmScheme = [(Maybe Moment, Maybe Volume)] > type Rhythm = [(Moment, Volume)] > > -- The resolution function will then be a function with type: > > rhythm_from_scheme :: RhythmScheme -> Rhythm > > -- Though you might want something like > -- rhythm_from_scheme :: RhythmScheme -> IO Rhythm > -- or > -- rhythm_from_scheme :: Seed -> RhythmScheme -> Rhythm > -- so that you can get and use random numbers, for example. > > > I guess the point of my suggestion is to let pattern matching in > function definitions deal with unification of constraints. Beta > reduction and unification are two sides of a coin. Nice. But what if I have three or more values (and not just two). Then inside the rhythm_from_scheme function I will probably have functions like a->b->c, i.e. if two values are known I can compute the third. If only one value is known the result would be a partially applied function and I would need additional information to compute the result. So I will need more than just a Mabye, because I can either have Nothing, a value or a function. However I will need one such function for each permutation. The function a->b->c will not help me much if either b or c is known. This means I cannot stuff too many unknowns together, but I will have to layer the problem somehow, such that a 9tuple of unknowns is unified as three triples. I am still uncertain how to do this, but I believe it basically matches musical thinking. A composer cannot juggle 9 unknowns either without grouping them somehow. Another question is: how much past and future knowledge do I need. (I believe the fundamental property of music is that things are ordered). In order to compute Volumes from Moments I can get pretty much away without the past, but computing Moments from Volumes definitely requires knowing "where I am", because each new Moment has to be placed after a preceding Moment. Any ideas? -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] When the unknown is unknown
Hello all, I am currently playing with Paul Hudak's Euterpea (a music program, formely called Haskore) and I am trying to teach it about rhythm. I said that a rhythm is a series of Moments (or Beats), each expressed as fractions of a bar. But each Moment also has volume. So I could model rhythm as Pairs of (Moment, Volume). However I certanly do not want to specify both the Moments and the Volume, but rather compute one from the other. Often the Moments are known and I need to compute the Volumes, but this is not always the case. I might as well start with the volume and compute the moments. The latter would be particularly interesting when trying to find rhythms which are suitable for certain lyrics. In that case I must even be prepared to find more than one series-of-moments which "fit" to the given series-of-volumes. There are countless other problems like this, e.g. when trying to match harmony, melody and tension. In that case I even have three variables and I may want to specify tension first, then melody and have the harmony computed. At first glance this looks like a Prolog-like problem to me. I could say that certain things are always true for [(Moment, Volume)] and let an inference engine figure out the options which are still in consideration. From which angle would you approach problems like this? Should I get my hands on a prolog-in-haskel implementation (which indeed seems to exist)? Or should I roll my own poor-man's prolog? Or is this a constraint-satisfaction-problem? Or is there even a more straight-forward more haskellish pattern, which solves such problems? Any pointers would be much appreciated. -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Mapping a list of functions
Hello all The standard map function applies a single function to a list of arguments. But what if I want to apply a list of functions to a single argument. I can of course write such a function, but I wonder if there is a standard way of doing this, Related to that is the problem, that the function in map may require more than one argument, so I need to apply it partially to some value(s) first. But what if I want to fix its second and third argument and not its first argument? Can flip help? Thanks -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Vague: Assembly line process
On Tuesday, 15. June 2010 19:43:26 Steve Schafer wrote: > On Tue, 15 Jun 2010 19:23:35 +0200, you wrote: > >When I know my supplies I want to know what I can produce. When I know > > what I want to produce I want to know what supplies I need for that. Both > > kinds of questions should be answered by a singe Process thingy. > > > >I want to be able to chain processes and the whole thing should still act > > like a Process. > > This is a type of constraint network. If you have access to _Structure > and Interpretation of Computer Programs_, there is a section therein > devoted to constraint networks. Will check this out. I was hoping that something simpler would suffice. I am afraid of CSPs. Today I was playing with a matrix representation. I mean the one you learn in school for linear optimization problems. Usually the matrix is written so it tells you how much of each supply you need to produce a unit of outputs. So when you know the outputs you can compute what you need as a minimum. You can invert the matrix and it'll work on the oppsite direction: when you know the inputs it'll tell you what you can produce at most. Then I thought, what if I replace the (*) and (+) operations which are applied when I multipy the matrix with a vector (i.e. a vector if inputs or outputs) by something more general. So I replaced (+) by function application and my matrix was now a matrix of functions. But then I got lost trying to find a way to invert such a matrix. FWIW: while googeling around how to invert a matrix of functions I stumbeled across the "Process Specification Language". At least they defined an ontology, but there isn't much of computing stuff there. http://www.mel.nist.gov/psl/ -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Vague: Assembly line process
On Tuesday, 15. June 2010 01:40:03 Luke Palmer wrote: > So hang on, what is the problem? You have described something like a > vague model, but what information are you trying to get? Say, > perhaps, a set of possible output lists from a given input list? When I know my supplies I want to know what I can produce. When I know what I want to produce I want to know what supplies I need for that. Both kinds of questions should be answered by a singe Process thingy. I want to be able to chain processes and the whole thing should still act like a Process. > > Luke > > On Mon, Jun 14, 2010 at 11:16 AM, Martin Drautzburg > > wrote: > > Hello all, > > > > this is a problem which has haunted me for some time. If this is simply > > hillarious, please tell me so. Or it may be some well known unsolvable > > problem... > > > > An assembly process takes inputs and produces outputs. I could say a > > Process is a function > > > > canProduce :: [Input]->[Output]->Bool > > > > which tells me if the outputs can be produced from the inputs > > > > There may be a similar function which tells me if the inputs are > > completely consumed to procude the output. > > > > The inputs do not determine the exact outputs. Think of a Process which > > combines a List of Ints into pairs, such that the input ints are consumed > > and each input Int occurs in only one position in the output. There are > > many ways to do this. Still for any set of input Ints and output pairs I > > could decide if the output can be produced from the input. > > > > Likewise the Input is not determined by the output. There may be lots of > > choices from what I could build my output (buy from different vendors). > > > > When I know more about the inputs and outputs my choices get more and > > more limited. I would like to to pass inputs and/or outputs to > > "something" and I would like to get a "something" which is more > > restricted, but still essentially a thing which tells me if the outputs > > can be produced from the inputs. > > > > I just cannot find a way to even THINK about this problem in a reasonable > > general way. > > > > -- > > Martin > > ___ > > Haskell-Cafe mailing list > > Haskell-Cafe@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell-cafe -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Vague: Assembly line process
Hello all, this is a problem which has haunted me for some time. If this is simply hillarious, please tell me so. Or it may be some well known unsolvable problem... An assembly process takes inputs and produces outputs. I could say a Process is a function canProduce :: [Input]->[Output]->Bool which tells me if the outputs can be produced from the inputs There may be a similar function which tells me if the inputs are completely consumed to procude the output. The inputs do not determine the exact outputs. Think of a Process which combines a List of Ints into pairs, such that the input ints are consumed and each input Int occurs in only one position in the output. There are many ways to do this. Still for any set of input Ints and output pairs I could decide if the output can be produced from the input. Likewise the Input is not determined by the output. There may be lots of choices from what I could build my output (buy from different vendors). When I know more about the inputs and outputs my choices get more and more limited. I would like to to pass inputs and/or outputs to "something" and I would like to get a "something" which is more restricted, but still essentially a thing which tells me if the outputs can be produced from the inputs. I just cannot find a way to even THINK about this problem in a reasonable general way. -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] How to browse code written by others
Hello all, I need your advice about how to browse code which was written by someone else (Paul Hudak's Euterpea, to be precise, apx. 1 LOC). I had set some hopes on leksah, and it indeed shows me the interfaces, but I have not yet convinced it to show me more than that. I ran haddock over the sources, and again I could not see more that just signatures. I would be very happy with something like a Smalltalk browser. Something that would let me zoom down to the source code, but with "search" and hyperlink capabilities ("senders" and "implementers" in Smalltalk). Anyways, how do you guys do it, i.e. how to you dive into non-trivial foreign code? -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Literate programming
On Saturday, 12. June 2010 19:06:39 Darrin Chandler wrote: > On Sat, Jun 12, 2010 at 12:34:37PM -0400, aditya siram wrote: > > It's weird I was just thinking about LP in Haskell this morning. Check > > out John Milliken's dbus-core [1] written entirely in noweb. Okay I'll check out noweb. My personal opionion as a haskell newbie is that I love literate programming. I can write down my train of thoughts along with the source code, then I read the generated document an I can find flaws in it much more easily than when reading the bare source. I understand that this becomes less of an issue when you become more experienced with haskell. Still it will always be a good way to promote haskel-style solutions. I don't have any problems with LaTeX, but a less verbose solution would do just fine. My biggest problem is actually literate programming in conjunction with leksah. Can anybody comment on this issue? Do you guys use leskah at all? -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Literate programming
Hello all, Is literate programming something you guys actually do (I only know that Paul Hudak does), or is it basically a nice idea from days gone by? In case you do, then how do you do it? Do you use lhs2TeX or what? Do you use "bird" style of full-blown LaTeX? Does any of you use leksah? I failed to see any support for literate programming in leksah. It candies the backslashes in e.g. \documentclass{article} to λdocumentclass{article}. In case you don't, then how do you document your code? If you write a paper which explains what your code does, then how do you do that? -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: How to "Show" an Operation?
On Friday, 11. June 2010 00:12:03 Daniel Fischer wrote: Thanks Daniel. > Upgrade. We're at 6.12 now! Did that. Everything is available now. I am still having trouble with the test function. First it seems I need braces, so I can mix == and <*>. test :: Num a => (a -> a) -> (a -> a) -> (a -> a) -> [String] test f g h = do [f', g', h'] <- permutations [Named "f" f, Named "g" g, Named "h" h] guard $ namedPure 42 == (f' <*> g' <*> h' <*> namedPure 42) return $ show f' ++ " . " ++ show g' ++ " . " ++ show h' But this leads to Occurs check: cannot construct the infinite type: a = (a -> a) -> a1 -> t When generalising the type(s) for `test' This error message is still the maximum penalty for me (along with "Corba marshall exception" in J2EE and "Missing right parenthesis" in Oracle SQL) Then generally speaking, I have the feeling that this code does not allow "namifying" existing code either. In this respect it does not seem to do better than the "apply" method pattern discussed earlier in this thread. The problem it solves is very simple and therefore using (<*>) and namedPure isn't much of a drawback. But if I had tons of code to namify I would still have to do significant changes to it, right? -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: How to "Show" an Operation?
On Thursday, 10. June 2010 22:10:08 Maciej Piechotka wrote: Wow! this is somewhat above my level. I guess I need to go back to the books. I'll document my ignorance nontheless. > data Named a = Named String a > > instance Functor Named where > f `fmap` (Named s v) = Named s (f v) > okay so far > instance Applicative Named where > pure x = Named "" x > (Named s f) <*> (Named t v) = Named (s ++ "(" ++ t ++ ")") (f v) Applicative. Need to study that Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b So in our case the Applicative is a "Named". When I apply a Named to a function, then I get a function between the corresponding Named types. When I pass it an Int->Char function, I get a Named Int -> Named Char function. But here it is applied to another Named ... is that the (a->b)? Puzzeled. > instance Eq a => Eq (Named a) where > (Named _ x) == (Named _ y) = x == y > > instance Show (Named a) where > show (Named s _) = s > Understood. > namedPure :: Show a => a -> Named a > namedPure x = Named (show x) x When I can show something I can always name it so its name is what 'show' would return. Okay I guess I got it. This turns a "showable" into a Named. > > test :: Num a > => (a -> a) -> (a -> a) -> (a -> a) -> [String] > test f g h = do > [f', g', h'] <- permutations [Named "f" f, Named "g" g, Named "h" h] According to Hoogle permutations should be in Data.List. Mine (GHCI 6.8.2) does not seem to have it. Seems to have something to do with "base", whatever that is. > guard $ namedPure 42 == f' <*> g' <*> h' <*> namedPure 42 Ah, the 42 needs namedPure. Again this <*> operator... I believe the whole thing is using a List Monad. > return $ show f' ++ " . " ++ show g' ++ " . " ++ show h' I wonder if the thing returns just one string or a list of strings. I guess "return" cannot return anything more unwrapped than a List, so it must be a List. But does it contain just the first match or all of them? All of them! And how many brackets are around them? -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How to "Show" an Operation?
On Thursday, 10. June 2010 00:08:34 Luke Palmer wrote: > Or just: > > apply = val_of > So, to summarize: if you have something that isn't a function and you > want to use it like a function, convert it to a function (using > another function :-P). That's all. No syntax magic, just say what > you're doing. Thanks Luke The reason I was asking is the following: suppose I have some code which uses some functions, and what it primarily does with those functions is CALL them in different orders. Now at a later point in time I decide I need to give names to those functions because at the end I need to print information about the functions which together solved a certain problem. Think of my problem as "In which order do I have to call f,g,h such that (f.g.h) 42 = 42?". I don't want to change all places where those functions are called into "apply" style. Therefore I was looking for some idiom like the python __call__() method, which, when present, can turn just about anything into a callable. I could change the *definition* of my original functions into "apply" style and the rest of the code would not notice any difference. But that does not really help, because in the end I want to Show something like [g,h,f], but my functions would no longer carry names. Alternatively I could associate functions with names in some association function, but that function simply has to "know to much" for my taste. The thing is, I only need the names at the very end. Throughout the majority of the computation they should stay out of the way. -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How to "Show" an Operation?
On Monday, 7. June 2010 23:28:08 Evan Laforge wrote: > I just meant you could add instances: > > instance Functor (Named a) where fmap f named = named { val_of = f > (val_of named) } > instance Applicative (Named a) where ... likewise, but maybe not a > great fit unless you have a "no name" for 'pure' So far so good. However my "Named" things are all functions and I don't see I ever want to map over any of them. But what I'd like to do is use them like ordinary functions as in: f::Named (Int->Int) f x Is there a way to do this, other than writing apply::Named Int ->Int apply n x = (val_of n) x -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] How to name a mapped function?
Hello all, I like some of the naming conventions in haskell quite a lot, like calling a list of something "xs", or function which takes a function as a parameter "..By" as in sortBy or groupBy. If I have a function, say "compute" whose last parameter is some value ... and I create another function, which applies "compute" to a list of values, how would I call this function? I was tempted to use "all", but my original function already returns a list, so this would be misleading. Also note that the mapped version, does some additional things (remove duplicates), otherwise a new function would hardly be justified. -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How to "Show" an Operation?
On Friday, 4. June 2010 18:02:15 Daniel Fischer wrote: > On Friday 04 June 2010 17:37:16, Martin Drautzburg wrote: > > Dear all, > > > > If I have a problem where I have to select from a set of operations, how > > would I print the result? > > > > Example: If I can chose from (x+y), (x*y), (x^2+y)... > > and I feed them all into my problem solver > > and it finds that "(x*y) is right", how can I print that string? > > You'd have to pass the description string to the problem solver too. > If it was previously > > solver :: Num a => Whatever -> [a -> a -> a] -> Result > > it would become for example > > solver :: Num a => Whatever -> [(a -> a -> a, String)] -> Result Thanks to Ozgur Akgun for his suggestion. However I really wanted a "human readable" name, but admittedly I haven't said so. About this one: The only thing I miss in this solution, is that the name is identified by its position in the Pair. In this case this is certainly not a problem. But anyways, I tried to give it a name, using record syntax. This worked well until I wanted to define a different set of operations, which should also be named. It turned out that the "name" function, which was implicitly created (using record syntax) cannot be used again. How should I work around that. I could use two different "name" function, but I don't like this. Would I have to define a typeclass "namedFunction" which all have a "name" function? I guess my mind is still a bit stuck in the OO world. -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] How to "Show" an Operation?
Dear all, If I have a problem where I have to select from a set of operations, how would I print the result? Example: If I can chose from (x+y), (x*y), (x^2+y)... and I feed them all into my problem solver and it finds that "(x*y) is right", how can I print that string? -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Language Shootout reverse-complement benchmark
Inspired by this post I looked at the language shootout. There is one thing which strikes me: On http://shootout.alioth.debian.org/u64/performance.php?test=spectralnorm#about It sais for the spectralnorm benchmark that both Haskel GHC #4 and HaskellGHC produce "bad output". For GHC I connt see what's wrong because 1.274224153 seems to be the correct result. But there really seems to be something wrong with GHC#4. -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
RE: [Haskell-cafe] [reactive] A pong and integrate
I work in the games industry and I'm also not convinced of the Haskell+FRP path for games, but for different reasons. I am very fond of Haskell for games however, and think it is achievable. Regarding FRP, I don't think it is the right framework to base a game on. It's great for some stuff, particularly the kind of problem Peter demonstrated, but games are a lot more varied than that and efficiency concerns aside, it's just not the right approach for everything. I see it more as a useful tool for some elements than a framework that should form the backbone of a game. Functional programming on the other hand is a big thing. Games look a lot more functional now days than they ever did before, and C++ doesn't have the right vocabulary to allow you to scratch this itch properly. EDSLs, parallelism, composability, higher order functions, and static typing are really where it's at, and Haskell excels at this. There's a lot of missed opportunities for more elegant and powerful architectures going by at the moment simple because it's not realistic to attempt them in C/C++. One area where Haskell is not so hot and needs a bit of TLC is it's 'embedability'. A large cross-platform 100% Haskell game is not on the cards at the moment, but Haskell could start getting its hands dirty, if only it could be sensibly embedded within an otherwise C++ app. This would allow people to start to take advantage of it, without some wholesale switch over. However, to do this, Haskell implementations at least need to be more compiler and platform agnostic, and we would probably need a lot more control over the Haskell runtime itself, particularly wrt memory handling. Lua (which is very popular in the games industry) and ATS (which isn't used to my knowledge, but has excellent interaction with C) are good examples of languages where this kind of thing is considerably easier. Haskell would have to fit in differently to this, but that's the kind of idea. Interesting things to note are that in this scenario, you could probably ditch IO altogether and just embed 'pure' Haskell. Games have very limited IO which would likely be best handed in C++ anyway. Laziness/space leaks, garbage collection and general performance concerns are obviously also issues, but that's for another day J Cheers, Sam From: haskell-cafe-boun...@haskell.org [mailto:haskell-cafe-boun...@haskell.org] On Behalf Of Limestraël Sent: 26 May 2010 08:52 To: Peter Verswyvelen Cc: haskell-cafe@haskell.org; Patai Gergely Subject: Re: [Haskell-cafe] [reactive] A pong and integrate > The GHC bugs are now fixed, so it might be stable enough for > another adventure like that, but I don't think I would bet on it > again. GHC bugs are corrected, but Reactive still have some. (See my previous posts) > IMO Haskell is great for writing small clean prototypes, doing > interesting research, and maybe making some fun little games, but I > wouldn't use it for production reactive game coding, not yet at least. Tim Sweeney (from Epic Games) has another perspective about that [1]. Besides, FRP is not mandatory. You can always make games in Haskell by using a more regular style (more "imperative", would some say). For now, the main problem is the small number of Haskell libraries for games when compared to the huge numbers of those which exist in C++, which prevents, for now, Haskell to be used as the main language for big commercial games. But for smaller scale games (like indie), which have less needs, I think it's worth it. [1] http://www.scribd.com/doc/5687/The-Next-Mainstream-Programming-Language-A-Game-Developers-Perspective-by-Tim-Sweeney 2010/5/25 Peter Verswyvelen Well, first of all, I did not make these PS3 visualization, my former colleagues and I just made the editor, language and runtime that allowed video game artists to do the job for us in a couple of weeks time :-) I wouldn't use Yampa, for performance reasons, and difficulty to get it running on alien platforms (it is well known it performs relatively badly, although the work done by Paul Liu and co on Causal Commutative Arrows looks very promising, but does not support dynamic switching yet). After all, Yampa models a synchronous dataflow language, and compilers for these languages are relatively easy to make IMO. My previous - now defunct - company Anygma spent a lot of money on trying to use Haskell and Reactive for game programming, which unfortunately ended in some nasty GHC bugs popping up (see http://www.haskell.org/haskellwiki/Unamb), and not all problems with Reactive got fixed; it is amazing how difficult this all turned out to be. The GHC bugs are now fixed, so it might be stable enough for another adventure like that, but I don't think I would bet on it again. IMO Haskell is great for writing small clean prototypes, doing interesting research, and maybe making some fun little games, but I wouldn't use it for production reactive game codi
RE: [Haskell-cafe] Best way to instance Fix?
That's great, thanks. Looks like FlexibleContexts is redundant (effectively a subset of UndecidableInstances?). Ivan, I hadn't realised, but I had FlexibleInstances on before for other reasons. I guess that's why I ccould get the workaround to compile. Cheers, Sam -Original Message- From: Reid Barton [mailto:rwbar...@math.harvard.edu] Sent: Mon 24/05/2010 02:28 To: Sam Martin Cc: haskell-cafe@haskell.org Subject: Re: [Haskell-cafe] Best way to instance Fix? On Mon, May 24, 2010 at 02:13:32AM +0100, Sam Martin wrote: > > Hi! > > I'm trying to work out the best way to generate (ideally derive) instances > for the Fix type. Here's a cut down example: > > data Greet x = AlloAllo x x | AuRevoir deriving Show > newtype Fix f = In { out :: f (Fix f) } -- deriving Show -- DOESN'T COMPILE > > -- workaround > instance Show (Fix Greet) where show (In i) = "In " ++ show i > > In other words, given a number of parametised types that I can derive, say, > Ord, Eq and Show for, how should I go about getting the instances for the > Fix-d version of them as well? I've tried a few things, but no luck so far. > > Any clues? You can use GHC's standalone deriving mechanism for this, described at http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/deriving.html {-# LANGUAGE StandaloneDeriving, FlexibleContexts, UndecidableInstances #-} data Greet x = AlloAllo x x | AuRevoir deriving Show newtype Fix f = In { out :: f (Fix f) } deriving instance Show (f (Fix f)) => Show (Fix f) Regards, Reid Barton ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Best way to instance Fix?
Hi! I'm trying to work out the best way to generate (ideally derive) instances for the Fix type. Here's a cut down example: data Greet x = AlloAllo x x | AuRevoir deriving Show newtype Fix f = In { out :: f (Fix f) } -- deriving Show -- DOESN'T COMPILE -- workaround instance Show (Fix Greet) where show (In i) = "In " ++ show i In other words, given a number of parametised types that I can derive, say, Ord, Eq and Show for, how should I go about getting the instances for the Fix-d version of them as well? I've tried a few things, but no luck so far. Any clues? Cheers, Sam ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] making the GHC Api not write to stderr
hi, i tried this too, but i did not get it. a very nice workaround is to use hint [1]. have fun martin [1]: http://hackage.haskell.org/package/hint On 20.05.2010 20:05, Phyx wrote: I was wondering how to forcibly quiet down the API. I have a custom handler in place, but when I call the function on failure both my handler gets called and somewhere somehow errors get printed to the stderr, which I really need to avoid. My current code looks like getModInfo :: Bool -> String -> String -> IO (ApiResults ModuleInfo) getModInfo qual file path = handleSourceError processErrors $ runGhc (Just libdir) $ do dflags <- getSessionDynFlags setSessionDynFlags $ configureDynFlags dflags target <- guessTarget file Nothing addTarget target setSessionDynFlags $ dflags { importPaths = [path] } load LoadAllTargets graph <- depanal [] False let modifier = moduleName . ms_mod modName = modifier $ head graph includes = includePaths dflags imports = importPaths dflags dflags' <- Debug.trace (moduleNameString modName) getSessionDynFlags setSessionDynFlags $ dflags' { includePaths = path:includes , importPaths = path:imports } parsed <- parse modName checked <- typecheckModule parsed ___ 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
[Haskell-cafe] corner case in Text.JSON 0.4.3
hi, since i got no answer from the maintainer, maybe someone else can take care of it, or at least point out, what i did wrong. so, i recently stumbled upon some error while using Text.JSON 0.4.3 [1]: Text/JSON/String.hs:(127,4)-(137,49): Non-exhaustive patterns in case indeed ghc warned: [5 of 7] Compiling Text.JSON.String ( Text/JSON/String.hs, dist/build/Text/JSON/String.o ) Text/JSON/String.hs:127:4: Warning: Pattern match(es) are non-exhaustive In a case alternative: Patterns not matched: [] from looking at the code i couldn't see how this would ever happen, but you can reproduce it be running the files from [2]: $ ./test < problem Ok (JSArray [JSString (JSONString {fromJSString = "this"}),JSString (JSONString {fromJSString = "is"}),JSString (JSONString {fromJSString = "some"}),JSString (JSONString {fromJSString = "json"}),JSObject (JSONObject {fromJSObject = [("that",JSString (JSONString {fromJSString = "works"}))]})]) test: Text/JSON/String.hs:(127,4)-(137,49): Non-exhaustive patterns in case the patch i put there fixes it (at least for me) to return an Error instead of dying: $ ./test < problem Ok (JSArray [JSString (JSONString {fromJSString = "this"}),JSString (JSONString {fromJSString = "is"}),JSString (JSONString {fromJSString = "some"}),JSString (JSONString {fromJSString = "json"}),JSObject (JSONObject {fromJSObject = [("that",JSString (JSONString {fromJSString = "works"}))]})]) Error "Unexpected end of String: does" Error "Malformed JSON: invalid token in this context not\"]" test: : hGetLine: end of file have fun martin hilbig [1]: http://hackage.haskell.org/package/json [2]: http://friendpaste.com/3IvnChRMoczf0mIKpOtrYE ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Haskell and scripting
On May 3, 2010, at 3:45 PM, Limestraël wrote: > Thank you all, that's very interesting. > > Martin, I've started reading the paper, I like the way you think about what a > scripting language should provide ("traceability, error handling and a type > system"). > But, hold me if I'm wrong, but at no moment in the paper you made you own > language? It's a EDSL, not a DSL, That's correct. We have defined a DSEL, but in my view this is still a DSL; the "E" only refers to a specific way of implementing it. > so I don't see where is the scripting, since the program will always have to > be recompiled, won't it? I may have misunderstood your goals and what you mean by "scripting". Our DSEL is intended to be used for expressing all kinds of scripting tasks. -- Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Haskell and scripting
One of my students has worked on scripting approach in Haskell: http://web.engr.oregonstate.edu/~erwig/papers/abstracts.html#SLE09 -- Martin On May 3, 2010, at 9:51 AM, Limestraël wrote: > Hello Café, > > I don't know if you know conky. It's a well-known open-source system monitor > (a software that displays information on the desktop, like CPU frequency, > disk usage, network rate, etc.). > It is quite good, but it's very descriptive, and even if you can call shell > commands it's clearly not made for being scripted. > What I would do is to make a similar system monitor, which base would be > compiled Haskell code, but that would be scriptable with some DSL, or already > existing interpreted language. > I've thought about a Lisp/Scheme language, since those languages are > functional, dynamically typed and simple (so enable a quick scripting) and > I'm not very keen on making my own DSL > > What I would like to know is: > 1) If you have other solutions > 2) How do haskellers usually script their applications > ___ > 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
[Haskell-cafe] FGL up for adoption
Dear FGL users and contributors, The FGL seeks a new home. I don't really have the time anymore to maintain the FGL and add new components at a level that it deserves. I am therefore looking for someone (or a group of people) who would be interested in taking over the maintenance and future development. Anybody interested? Thanks, Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Haskell+Cassandra was: RE: [Haskell-cafe] Re: Haskell.org re-design
Maybe a bit off-topic, but as Johan mentioned the Cassandra web site... Are there any Haskellers out there using Cassandra with Haskell? Thanks, Martin > -Original Message- > From: haskell-cafe-boun...@haskell.org > [mailto:haskell-cafe-boun...@haskell.org] On Behalf Of Johan Tibell > Sent: Tuesday, April 06, 2010 11:36 AM > To: Simon Michael > Cc: haskell-cafe@haskell.org > Subject: Re: [Haskell-cafe] Re: Haskell.org re-design > > On Tue, Apr 6, 2010 at 5:24 AM, Simon Michael > wrote: > > On 4/2/10 5:28 AM, Thomas Schilling wrote: > >> > >> How about something more colourful? > >> > >> http://i.imgur.com/7jCPq.png > > I really like the simplicity of the Cassandra page: > > http://cassandra.apache.org/ > ___ > 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] Haskell at Indian Universities?
On Tue, Mar 30, 2010 at 2:07 AM, Joachim Breitner wrote: > I’m a computer science student in Germany and I’d like to spend one > semester as an exchange student in India. I have no specific plans yet > where I want to go, and I’m wondering if there are universities in India > where Haskell is basis for research or at least used as a tool. Haskell > and functional programming is quite underrepresented at my university, > so maybe this might be a good opportunity for me to combine Haskell and > academia. Here's a prof at IIT-Bombay who's into Haskell; you could write to him for further suggestions. http://www.cse.iitb.ac.in/~as martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Happstack basic question
On Thu, Mar 11, 2010 at 09:24:05AM -0500, Kyle Murphy wrote: > You misunderstand his question. He's trying to setup happstack behind a > reverse proxy running on the same system, so he needs to be able to bind it > only to the loopback interface (127.0.0.1), as opposed to all the interfaces > on the system (thereby making it inaccessible from the network unless > accessed through the proxy). I don't know enough about happstack to answer > his question, but I can see from the documentation you provided that there > doesn't seem to be any way to specify address to bind to as Dmitry stated in > his original e-mail. But I'm doing exactly that. Here is some of the code: main = do ... s <- socket AF_INET Stream defaultProtocol setSocketOption s ReuseAddr 1 h <- getHostByName "localhost" let p = toEnum $ port $ httpConf appConf bindSocket s (SockAddrInet p (hostAddress h)) listen s 10 -- start the state system control <- startSystemState' (store appConf) stateProxy -- start the http server httpTid <- forkIO $ simpleHTTPWithSocket s (httpConf appConf) ... And then my happstack server is just listening on 127.0.0.1. To access it, I'm using Apache Proxy. - Martin > > -R. Kyle Murphy > -- > Curiosity was framed, Ignorance killed the cat. > > > On Thu, Mar 11, 2010 at 07:39, Martin Kiefel wrote: > > > Hi Dmitry, > > > > On Thu, Mar 11, 2010 at 11:38:44AM +0300, Dmitry V'yal wrote: > > > Hello haskellers, > > > > > > I want to host a simple happstack application behind a reverse proxy. So > > > ideally would be to bind it to localhost only. > > > > > > According to > > > > > http://hackage.haskell.org/packages/archive/happstack-server/0.4.1/doc/html/Happstack-Server-HTTP-Types.html#t%3AConf > > > Conf datatyle has only Port field. Does it mean, there is currently no > > > way to prevent binding happstack to all available interfaces? > > > > I think you are looking for simpleHTTPWithSocket [1]. You can use > > whatever socket you like. > > > > > > > > Regards, > > > Dmitry > > > > Cheers, > > Martin > > > > [1] > > http://happstack.com/docs/0.4/happstack-server/Happstack-Server-SimpleHTTP.html#v%3AsimpleHTTPWithSocket > > ___ > > 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] Happstack basic question
Hi Dmitry, On Thu, Mar 11, 2010 at 11:38:44AM +0300, Dmitry V'yal wrote: > Hello haskellers, > > I want to host a simple happstack application behind a reverse proxy. So > ideally would be to bind it to localhost only. > > According to > http://hackage.haskell.org/packages/archive/happstack-server/0.4.1/doc/html/Happstack-Server-HTTP-Types.html#t%3AConf > Conf datatyle has only Port field. Does it mean, there is currently no > way to prevent binding happstack to all available interfaces? I think you are looking for simpleHTTPWithSocket [1]. You can use whatever socket you like. > > Regards, > Dmitry Cheers, Martin [1] http://happstack.com/docs/0.4/happstack-server/Happstack-Server-SimpleHTTP.html#v%3AsimpleHTTPWithSocket ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] redirecting ghc (as a library) output
hi, i'm writing a Haskell View Server for CouchDB. it communicates with couchdb over stdin and stdout. it gets JSON encoded haskell code, compiles it (like on http://www.haskell.org/haskellwiki/GHC/As_a_library), gets values, runs the given code over the given values and writes the results back (also json encoded). when there is an error in the given haskell code it should reply with the error json encoded and exit. but f.e. when the given code imports a module, which cannot be found (here Reaction) ghc just spits out a panic directly to stdin and exits like this: > ViewServer: panic! (the 'impossible' happened) > (GHC version 6.12.1 for x86_64-unknown-linux): > Could not find module `Reaction': > Use -v to see a list of the files searched for. > > > Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug it puts other errors directly to stdout too, like: > Assembler messages: > Fatal error: can't create > /home/*/AlkylRadicalDecomposition.o: > Permission denied this confuses couchdb, because it expects some JSON and i cant see whats going on between them. now, how can i prevent ghc from using stdout and wrap the output in some JSON? is this even possible? with ghc 6.10 this usage of 'handle' worked for me: > main = handle (\e -> do >let e' = show (e::SomeException) >case fromException e of > Just UserInterrupt -> exitSuccess > _ -> do > let err = error2json "the impossible happened..." e' > putStrLn err > logToFile err > return []) main_loop did i got the Exception handling wrong? thanks in advance. have fun martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Re: Non-termination of type-checking
On Fri, Jan 29, 2010 at 8:56 AM, wrote: > > Here is a bit more simplified version of the example. The example has > no value level recursion and no overt recursive types, and no impredicative > polymorphism. The key is the observation, made earlier, that two types >c (c ()) and R (c ()) > unify when c = R. Although the GADTs R c below is not recursive, when > we instantiate c = R, it becomes recursive, with the negative > occurrence. The trouble is imminent. > > We reach the conclusion that an instance of a non-recursive GADT > can be a recursive type. GADT may harbor recursion, so to speak. > > The code below, when loaded into GHCi 6.10.4, diverges on > type-checking. It type-checks when we comment-out absurd. > > > {-# LANGUAGE GADTs, EmptyDataDecls #-} > > data False -- No constructors > > data R c where -- Not recursive >R :: (c (c ()) -> False) -> R (c ()) > > -- instantiate c to R, so (c (c ())) and R (c ()) coincide > -- and we obtain a recursive type > --mu R. (R (R ()) -> False) -> R (R ()) > > cond_false :: R (R ()) -> False > cond_false x@(R f) = f x > > absurd :: False > absurd = cond_false (R cond_false) > > GHC (the compiler terminates) The following variants terminate, either with GHCi or GHC, absurd1 :: False absurd1 = let x = (R cond_false) in cond_false x absurd2 = R cond_false absurd3 x = cond_false x absurd4 :: False absurd4 = absurd3 absurd2 This suggests there's a bug in the type checker. If i scribble down the type equation, I can't see why the type checker should loop here. -Martin > > ___ > 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] Language simplicity
On 14 Jan 2010, at 14:42, Matthias Görgens wrote: >> All Lisps have "special forms" which are evaluated uniquely and differently >> from function application and are therefore reserved words by another name. >> For example, Clojure has def, if, do, let, var, quote, fn, loop, recur, >> throw, try, monitor-enter, monitor-exit, dot, new and set!. > > Yes, but the special forms are not distinguishable from user defined > macros --- and some Lisp-implemantations special forms are another > implementations macros. E.g. you can choose to make `if' a macro that > expands to `cond' or vice versa. I do not know whether you are > allowed to shadow the name of special-forms. > Clojure's a lot more 'syntaxy' than most Lisps. It has literals for large classes of entities that get represented as lists in most other Lisps. Which I guess is clearly a pragmatic design decision: be as syntax-heavy as is reasonably practicable without sacrificing homoiconicity and ending up like Dylan. Martin___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] General Advice Needed ..
> > But after that im lost :( > > Is there any general advice? Just keep reading the book till it drills into > my big head? Is it that you're having difficulty knowing how you'd solve certain classes of problems using Haskell? You're stuck in an imperative rut? The O'Reilly book "Real World Haskell" is very good for this, because as the name implies, it uses Haskell to solve actual engineering problems, rather than approach it from the theoretical angle. Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How to fulfill the "code-reuse" destiny of OOP?
>> > > Anonymous classes in Java close over their lexical environment (can > refer to variables in that lexical environment, with values bound at > the time of instance construction) with the caveat that only local > variables/parameters marked as 'final' may be referred to. Aside from > the horrible syntax, this is the key distinction between them, and, > say, Ruby closures. Referring to mutable variables from inside a > closure has its drawbacks, making the horrible syntax the biggest > stumbling block to using them IMHO (other than runtime overhead, which > I believe is also an issue). Yes, this. Which makes them basically unusable where you might want proper closures. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] How to fulfill the "code-reuse" destiny of OOP?
On 13 Jan 2010, at 09:51, Peter Verswyvelen wrote: > On Sun, Nov 1, 2009 at 2:57 AM, Gregory Collins > wrote: > Doing OO-style programming in Haskell is difficult and unnatural, it's > true (although technically speaking it is possible). That said, nobody's > yet to present a convincing argument to me why Java gets a free pass for > lacking closures and typeclasses. > > I might be wrong, but doesn't Java's concepts of inner classes and interfaces > together with adapter classes can be used to replace closures and typeclasses > in a way? Inner classes are not a semantic replacement for closures, even if you discount horrific syntax. Inner classes do not close over their lexical environment. Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Language simplicity
On 12 Jan 2010, at 22:22, Andrew Coppin wrote: > Niklas Broberg wrote: >>> Haskell '98 apparently features 25 reserved words. (Not counting "forall" >>> and "mdo" and so on, which AFAIK are not in Haskell '98.) >>> >> >> 21 actually. case, class, data, default, deriving, do, else, if, >> import, in, infix, infixl, infixr, instance, let, module, newtype, of, >> then, type, where. There's also three special words that can still be >> used as identifiers, so aren't reserved: as, qualified, hiding. >> > > OK. Well the list I saw was for Haskell plus extensions, and I visually > filtered out the inapplicable stuff. Apparently I missed something. > > Also, the number varies depending on whether you consider "reversed words" or > "keywords", Aye, there's a subtle distinction between keywords and reserved words, but I think for the purposes of this discussion, they're the same thing. Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Language simplicity
On 12 Jan 2010, at 21:25, Andrew Coppin wrote: > OK people, it's random statistics time! > > Haskell '98 apparently features 25 reserved words. (Not counting "forall" and > "mdo" and so on, which AFAIK are not in Haskell '98.) So how does that > compare to other languages? > > C: 32 > C++: 62 > Borland Turbo Pascal: ~50 [without the OOP extensions added later] > Eiffel: 59 > VB: The source I checked listed in excess of 120 reserved words, but I'm > dubious as to how "reserved" they really are. (Is CInt really reserved? I > doubt it!) It also depends wildly on which of the bazillion VB dialects you > mean. > Java: 50 > JavaScript: 36 > Smalltalk: 0 There are six singleton pseudo-variables that act as reserved words: true,false, nil, self, super and thisContext. > Lisp: AFAIK, there are no truly reserved words in Lisp, only predefined > functions. (??) All Lisps have "special forms" which are evaluated uniquely and differently from function application and are therefore reserved words by another name. For example, Clojure has def, if, do, let, var, quote, fn, loop, recur, throw, try, monitor-enter, monitor-exit, dot, new and set!. > Python: 31 > Ruby: 38 > Tcl: Same analysis as for Lisp I believe. COBOL: Over 400 (!) > > As you can see, this conclusively proves... something. Generally speaking, the most widely used languages seem to be near the upper end of the range. I don't think it really tells you that much. Possibly that a little superficial complexity through syntactic sugar can make your language a lot more human-friendly, but that it's possible to go too far and end up like C++. Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Restrictions on associated types for classes
The statements class Cl [a] => Cl a and instance Cl a => Cl [a] (I omit the type family constructor in the head for simplicyt) state the same (logical) property: For each Cl t there must exist Cl [t]. Their operational meaning is different under the dictionary-passing translation [1]. The instance declaration says we build dictionary Cl [a] given the dictionary Cl [a]. The super class declaration says that the dictionary for Cl [a] must be derivable (extractable) from Cl a's dictionary. So, here we run into a cycle (on the level of terms as well as type inference). However, if we'd adopt a type-passing translation [2] (similar to dynamic method lookup in oo languages) then there isn't necessarily a cycle (for terms and type inference). Of course, we still have to verify the 'cyclic' property which smells like we run into non-termination if we assume some inductive reason (but we might be fine applying co-induction). -Martin [1] Cordelia V. Hall, Kevin Hammond<http://www.informatik.uni-trier.de/%7Eley/db/indices/a-tree/h/Hammond:Kevin.html>, Simon L. Peyton Jones<http://www.informatik.uni-trier.de/%7Eley/db/indices/a-tree/j/Jones:Simon_L=_Peyton.html>, Philip Wadler<http://www.informatik.uni-trier.de/%7Eley/db/indices/a-tree/w/Wadler:Philip.html>: Type Classes in Haskell. ACM Trans. Program. Lang. Syst. 18<http://www.informatik.uni-trier.de/%7Eley/db/journals/toplas/toplas18.html#HallHJW96>(2): 109-138 (1996) [2] Satish R. Thatte: Semantics of Type Classes Revisited. LISP and Functional Programming 1994<http://www.informatik.uni-trier.de/%7Eley/db/conf/lfp/lfp1994.html#Thatte94>: 208-219 On Thu, Dec 17, 2009 at 6:40 PM, Simon Peyton-Jones wrote: > | > Hmm. If you have > | > class (Diff (D f)) => Diff f where > | > > | > then if I have > | > f :: Diff f => ... > | > f = e > | > then the constraints available for discharging constraints arising > | > from e are > | > Diff f > | > Diff (D f) > | > Diff (D (D f)) > | > Diff (D (D (D f))) > | > ... > | > > | > That's a lot of constraints. > | > | But isn't it a bit like having an instance > | > |Diff f => Diff (D f) > > A little bit. And indeed, could you not provide such instances? That is, > every time you write an equation for D, such as > type D (K a) = K Void > make sure that Diff (K Void) also holds. > > The way you it, when you call f :: Diff f => , you are obliged to > pass runtime evidence that (Diff f) holds. And that runtime evidence > includes as a sub-component runtime evidence that (Diff (D f)) holds. If > you like the, the evidence for Diff f looks like this: >data Diff f = MkDiff (Diff (D f)) (D f x -> x -> f x) > So you are going to have to build an infinite data structure. You can do > that fine in Haskell, but type inference looks jolly hard. > > For example, suppose we are seeking evidence for >Diff (K ()) > We might get such evidence from either > a) using the instance decl > instance Diff (K a) where ... > or > b) using the fact that (D I) ~ K (), we need Diff I, so >we could use the instance > instance Diff I > > Having two ways to get the evidence seems quite dodgy to me, even apart > from the fact that I have no clue how to do type inference for it. > > Simon > ___ > 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] Hint causes GHCi linker error under Windows
The following module reproduces the error when loaded into ghci and main is executed under Windows. It works fine when compiled. \begin{code} module Main where import Language.Haskell.Interpreter main = putStrLn "File to load: " >> getLine >>= erroneousLoad erroneousLoad :: FilePath -> IO () erroneousLoad f = do ok <- runInterpreter $ loadModules [f] case ok of Right _ -> return () Left e -> fail (show e) \end{code} However in my current program I also encounter strange behaviour when executing compiled code. I use 'haskeline' for a REP-loop. The user input is parsed and passed to a function similar to 'erroneousLoad'. When I type the path character by character, or when start with an empty line by pressing return, again everything works fine. When I use the completion function of 'haskeline' the program crashes with a segmentation fault. Changing the runInterpreter line to trace ("XXX " ++ (show f)) $ runInterpreter $ trace "YYY" $ loadModules $ trace "ZZZ" [f] I get the following output: XXX "explExamples.hs" Igor2.exe: internal error: evacuate(static): strange closure type 1094 (GHC version 6.10.4 for i386_unknown_mingw32) Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug This application has requested the Runtime to terminate it in an unusual way, Please contact the application's support team for more information. Sometimes I get different types of the 'strange closure', e.g. 17408 or others. I was not able to reproduce those errors on a smaller example than my whole program. Under Linux none of those errors occurs. Cheers, Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Hint causes GHCi linker error under Windows
Hi Daniel, > Do you have a complete example one can use to reproduce this behavior? > (preferably a short one! :P) With this code I could reproduce it in ghci. > >> runInterpreter $ loadModules [("SomeModule.hs", Nothing)] Currently I am not on a Windows machine, so I can't tell you if this only occured when trying to load a specific module. I'll try it later and if so, I'll tell you. If you need more information, just let me know. Martin > > The error message is: > > > > GHCi runtime linker: fatal error: I found a duplicate definition for > > symbol _hs_gtWord64 whilst processing object file > > C:\Programme\Haskell Platform\2009.2.0.2\ghc-prim-0.1.0.0 > > HSghc-prim-0.1.0.o > > This could be caused by: > > * Loading two different object files which export the same symbol > > * Specifying the same object file twice on the GHCi command line > > * An incorrect `package.conf' entry, causing some object to be > > loaded twice. > > GHCi cannot safely continue in this situation. Exiting now. Sorry. > > > > The problem does not occur under Unix or with a compiled program. IMHO > > hint tries to start a second instance of GHCi which is not > > allowed/possible under Windows. If this is the case a more telling > > error > > message would be helpful. > > > > I used the Haskell Platform, version 2009.2.0.2 under Windows XP. My > > package.conf is: > > > > C:/Programme/Haskell Platform/2009.2.0.2\package.conf: > >Cabal-1.6.0.3, GHood-0.0.3, GLUT-2.1.1.2, HTTP-4000.0.6, > >HUnit-1.2.0.3, MonadCatchIO-mtl-0.2.0.0, OpenGL-2.2.1.1, > >QuickCheck-1.2.0.0, Win32-2.2.0.0, ansi-terminal-0.5.0, > >ansi-wl-pprint-0.5.1, array-0.2.0.0, base-3.0.3.1, base-4.1.0.0, > >bimap-0.2.4, bytestring-0.9.1.4, cgi-3001.1.7.1, > >containers-0.2.0.1, cpphs-1.9, directory-1.0.0.3, (dph-base-0.3), > >(dph-par-0.3), (dph-prim-interface-0.3), (dph-prim-par-0.3), > >(dph-prim-seq-0.3), (dph-seq-0.3), extensible-exceptions-0.1.1.0, > >fgl-5.4.2.2, filepath-1.1.0.2, (ghc-6.10.4), ghc-mtl-1.0.1.0, > >ghc-paths-0.1.0.6, ghc-prim-0.1.0.0, haddock-2.4.2, > >haskeline-0.6.2.2, haskell-src-1.0.1.3, haskell-src-exts-1.3.4, > >haskell98-1.0.1.0, hint-0.3.2.1, hpc-0.5.0.3, html-1.0.1.2, > >integer-0.1.0.1, mtl-1.1.0.2, network-2.2.1.4, old-locale-1.0.0.1, > >old-time-1.0.0.2, packedstring-0.1.0.1, parallel-1.1.0.1, > >parsec-2.1.0.1, pointless-haskell-0.0.1, pretty-1.0.1.0, > >process-1.0.1.1, random-1.0.0.1, regex-base-0.72.0.2, > >regex-compat-0.71.0.1, regex-posix-0.72.0.3, rts-1.0, stm-2.1.1.2, > >syb-0.1.0.1, template-haskell-2.3.0.1, time-1.1.2.4, > >utf8-string-0.3.6, xhtml-3000.2.0.1, zlib-0.5.0.0 > > > > Thanks, > > > > Martin > > > > ___ > > Haskell-Cafe mailing list > > Haskell-Cafe@haskell.org > > http://www.haskell.org/mailman/listinfo/haskell-cafe -- --- Dipl.-Wirtsch.Inf. (E.M.B.Sc.) Martin Hofmann Cognitive Systems Group Faculty Information Systems and Applied Computer Science University of Bamberg http://www.cogsys.wiai.uni-bamberg.de/members/hofmann http://www.inductive-programming.org ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] Hint causes GHCi linker error under Windows
The following hint code causes GHCi to crash under Windows: > runInterpreter $ loadModules ["SomeModule.hs"] The error message is: GHCi runtime linker: fatal error: I found a duplicate definition for symbol _hs_gtWord64 whilst processing object file C:\Programme\Haskell Platform\2009.2.0.2\ghc-prim-0.1.0.0 HSghc-prim-0.1.0.o This could be caused by: * Loading two different object files which export the same symbol * Specifying the same object file twice on the GHCi command line * An incorrect `package.conf' entry, causing some object to be loaded twice. GHCi cannot safely continue in this situation. Exiting now. Sorry. The problem does not occur under Unix or with a compiled program. IMHO hint tries to start a second instance of GHCi which is not allowed/possible under Windows. If this is the case a more telling error message would be helpful. I used the Haskell Platform, version 2009.2.0.2 under Windows XP. My package.conf is: C:/Programme/Haskell Platform/2009.2.0.2\package.conf: Cabal-1.6.0.3, GHood-0.0.3, GLUT-2.1.1.2, HTTP-4000.0.6, HUnit-1.2.0.3, MonadCatchIO-mtl-0.2.0.0, OpenGL-2.2.1.1, QuickCheck-1.2.0.0, Win32-2.2.0.0, ansi-terminal-0.5.0, ansi-wl-pprint-0.5.1, array-0.2.0.0, base-3.0.3.1, base-4.1.0.0, bimap-0.2.4, bytestring-0.9.1.4, cgi-3001.1.7.1, containers-0.2.0.1, cpphs-1.9, directory-1.0.0.3, (dph-base-0.3), (dph-par-0.3), (dph-prim-interface-0.3), (dph-prim-par-0.3), (dph-prim-seq-0.3), (dph-seq-0.3), extensible-exceptions-0.1.1.0, fgl-5.4.2.2, filepath-1.1.0.2, (ghc-6.10.4), ghc-mtl-1.0.1.0, ghc-paths-0.1.0.6, ghc-prim-0.1.0.0, haddock-2.4.2, haskeline-0.6.2.2, haskell-src-1.0.1.3, haskell-src-exts-1.3.4, haskell98-1.0.1.0, hint-0.3.2.1, hpc-0.5.0.3, html-1.0.1.2, integer-0.1.0.1, mtl-1.1.0.2, network-2.2.1.4, old-locale-1.0.0.1, old-time-1.0.0.2, packedstring-0.1.0.1, parallel-1.1.0.1, parsec-2.1.0.1, pointless-haskell-0.0.1, pretty-1.0.1.0, process-1.0.1.1, random-1.0.0.1, regex-base-0.72.0.2, regex-compat-0.71.0.1, regex-posix-0.72.0.3, rts-1.0, stm-2.1.1.2, syb-0.1.0.1, template-haskell-2.3.0.1, time-1.1.2.4, utf8-string-0.3.6, xhtml-3000.2.0.1, zlib-0.5.0.0 Thanks, Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
RE: [Haskell-cafe] Re: Idea for a very simple GUI llibrary
Thinking of a parallel with Java for a second, is there a GUI library out there that's structured like Java Swing? Meaning, there is a GUI library that has a small platform-specific GUI foundation (e.g. a per platform implementation of the core AWT functionality) and the rest of the functionality is pure haskell? Supporting cross platform guis is often a bit ... complicated. Java attempted to resolve their debug-everywhere nightmare with AWT by making the per-platform bit as small as possible, and building everything else in Java. I guess in theory gtk and wxWidgets take on this support burden, but you do get some fairly hefty imperative apis as a result. Perhaps it would make sense to focus efforts on stabilising a small 'core gui' library that can act as the foundation stone for all manner of pure haskell gui libraries?* Or perhaps this already exists? Just a thought. Cheers, Sam ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Idea for a very simple GUI llibrary
Has there been "real world" adoption of any of these, in the shape of a moderately complex end-user application that is not just a library demo? martin On Mon, Nov 23, 2009 at 8:48 AM, Keith Holman wrote: > You should also check out Fudgets and "Tangible Functional > Programming." Fudgets is a really old Haskell UI library concept; > Tangible FP is a recent Google talk about a UI library inspired by > Haskell types. > > 2009/11/22 Luke Palmer : >> Nice idea. I will try it if you write runGUI :-) >> >> This is an imperative style library. For more Haskellian GUI library >> ideas, see Fruit (http://www.haskell.org/fruit/) and TVs >> (http://www.haskell.org/haskellwiki/TV). They may not pass the >> "builds" constraint :-P >> >> Luke >> >> 2009/11/22 Maurício CA : >>> Hi, >>> >>> Here is a sketch for a library with these properties: >>> >>> -> Easy to test. All Haskell code can be tested in a text >>> terminal. Also, testing code that uses the library can also be >>> done without using a GUI. >>> >>> -> Extremely easy to document and use. >>> >>> -> Not even close to Gtk2hs power, but enough for small >>> applications. >>> >>> -> Could be the first GUI to build on hackage :) >>> >>> What we need is: >>> >>> -> MyState. A user suplied type for application state. >>> >>> -> WidId. A user suplied type for widget identifiers. >>> >>> -> Gui wi. A type capable of describing an interface with all of >>> its state. It's an instance of Eq. >>> >>> -> Event wi. A type for events. >>> >>> -> Prop. A type for properties than can related to a WidId. >>> >>> Running an application would be like this: >>> >>> main = runGUI >>> initState -- An initial MyState. >>> event -- :: MyState -> DiffTime -> Event WidId -> MyState >>> props -- :: WidId -> [Prop] >>> action -- :: MyState -> DiffTime -> IO (Maybe (MyState,Gui >>> WidId)) >>> timeout -- :: DiffTime >>> >>> DiffTime parameters for callbacks are always the time elapsed >>> since application started. >>> >>> From initState and event, the implementation of runGUI can save a >>> state that optionally changes with time. >>> >>> From props, it can get details on what to present in widgets >>> associated with a WidId (selected state, picture to draw etc.). >>> >>> action presents a chance for using IO, and optionally change state >>> and GUI description. >>> >>> timeout is the maximum time runGUI implementation is allowed to >>> wait between calls to action. >>> >>> Examples for those types: >>> >>> newtype MyState = { >>> lastUpdate :: DiffTime, >>> builtGui :: Bool, >>> earthCoordinates :: (Double,Double), >>> map :: SVG, >>> ... >>> } >>> >>> data WidId = XCoord | YCoord | MapWindow | ReloadButton ... >>> >>> data Gui widid = TitleWindow (Gui widid) >>> | Tabs [(String,Gui widid)] >>> | PressButton String widid >>> | Selection [String] widid >>> | ... >>> deriving Eq >>> {- >>> Eq is needed by runGUI to detect if GUI has >>> changed after the last call to action. >>> -} >>> >>> data Event widid = ButtonPressed widid >>> | FileSelected String widid >>> | OptionSelected String widid >>> | ... >>> >>> data Prop widid = Active Bool >>> | Text String >>> | Draw SVG >>> | ... >>> >>> I believe this can represent most kinds of simple applications, >>> and be efficient enough for practical use. >>> >>> It's interesting that all of this can be designed, implemented and >>> tested independent of runGUI implementation. Actually, if you want >>> a pet project and want to write and design the Haskell part, I may >>> probably be able to write runGUI for you :) >>> >>> Best, >>> Maurício >>> >>> ___ >>> 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 >> > ___ > 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] Graph drawing library for Haskell
On Fri, Nov 20, 2009 at 9:36 PM, Victor Mateus Oliveira wrote: > I'm looking for something more integrated with a gui library. The > jgraph integrates with swing, so you can move, create, delete, have > popup menus, select nodes, and so on. > > I haven't found yet.. If there isn't, I thinking in create one lib > with wxHaskell using wxDC... But by now, I really prefer to use one > existing library. Blobs [http://www.cs.york.ac.uk/fp/darcs/Blobs/] might be a better starting point than implementing from scratch on wxdc martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
RE: [Haskell-cafe] Cabal upload issue
Although it might be a pain in the arse to some degree, is there any reason why 'base' is considered special? As an example, I've come across a fair number of libraries/apps that (presumably) compile against a previous version of OpenGL, but not the current latest. Given it's impossible to test any package against libraries that don't yet exist, shouldn't the upper bound be required for all package dependencies? Just curious. :) ta, Sam -Original Message- From: haskell-cafe-boun...@haskell.org [mailto:haskell-cafe-boun...@haskell.org] On Behalf Of Neil Brown Sent: 12 November 2009 14:36 To: Jeremy O'Donoghue Cc: haskell-cafe@haskell.org Subject: Re: [Haskell-cafe] Cabal upload issue Jeremy O'Donoghue wrote: > Hi all, > > I'm in the process of trying update the revisions of wx (part of > wxHaskell) on hackage. > > I'm getting an error I find slightly surprising: > ... > Library > if flag(splitBase) > build-depends: base >= 3, wxcore >= 0.12.1.1, stm > Change this last line to base >= 3 && < 5 to get rid of the warning. I think the idea is that if base becomes version 5, it will likely break your code, so you should specify ahead of time that this library isn't currently designed to work with a version of base beyond 4. That way when someone installs your package in the future and you haven't tested with base 5, cabal will know to use base 4 for your library. Thanks, Neil. ___ 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] Problems with Language.Haskell.Interpreter and errors
Thanks, using MonadCatchIO-mtl-0.2.0.0 and hint-0.3.2.0 did it. ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Problems with Language.Haskell.Interpreter and errors
I still have problems and your code won't typecheck on my machine printing the following error: Test.hs:9:34: No instance for (Control.Monad.CatchIO.MonadCatchIO (InterpreterT IO)) arising from a use of `catch' at Test.hs:9:34-53 Possible fix: add an instance declaration for (Control.Monad.CatchIO.MonadCatchIO (InterpreterT IO)) In the first argument of `runInterpreter', namely `(code `catch` handler)' In the second argument of `(=<<)', namely `(runInterpreter (code `catch` handler))' In the expression: print =<< (runInterpreter (code `catch` handler)) I assume we are using different versions of some packages. Could you please send me the output of your 'ghc-pkg list'. Thanks, Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] Problems with Language.Haskell.Interpreter and errors
Although late, still very much appreciated. Thanks a lot! Cheers, Martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] What's the deal with Clean?
On Wed, Nov 4, 2009 at 10:34 AM, Richard O'Keefe wrote: > (4) It comes with its own IDE. I don't think it can do anything much that > Haskell tools can't do, but if you don't like looking for things, it's > a help. And a well-integrated GUI toolkit. If it weren't for the Windows bias I'd have definitely taken the time to learn the language. martin ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe