Thanks to everyone for their feedback. I've made some updates and posted the PDF to my blog:
http://blog.codeslower.com/2008/10/The-Haskell-Cheatsheet On Sat, Oct 11, 2008 at 4:33 AM, Thomas Hartman <[EMAIL PROTECTED]> wrote: > Very nice! > > I have my own cheat list, which are haskell commands I find useful but > find inconvenient or difficult to look up in the supplied > documentation. I actually hardwire my cheats into .bashrc doing > something like > > thartman_haskell_cheatting() { > > cat << EOF > blah blah > cheat > > } > > so i can quickly see all my haskell cheats using tab completion. but a > pdf is even nicer :) > > ************************** > > [EMAIL PROTECTED]:~/Desktop>thartman_haskell_oneliners > ghc -e '1+2' > > [EMAIL PROTECTED]:~/Desktop>thartman_haskell_regex_hints > cabal install pcre-regex > > Most likely want: > > Prelude Text.Regex.PCRE> "user123" =~ "^(user)(\d*)$" :: > (String,String,String,[String]) > ("","user123","",["user","123"]) > That is: (before match, match, after match, subgroups) > > or maybe > Prelude Text.Regex.PCRE> "user123 user456" =~ "(u(se)r)(\d*)" :: > [[String]] > [["user123","user","se","123"],["user456","user","se","456"]] > if you need all submatches of all matches > > since > Prelude Text.Regex.PCRE> "user123 user456" =~ "(user)(\d*)" :: > (String,String,String,[String]) > ("","user123"," user456",["user","123"]) > doesn't quite do what I want -- no submatches > and there's no instance for :: (String,String,String,[String]) > I don't need all submatches of all matches very often though. > > :: Bool -- did it match > :: String -- first match > :: [String] -- every match > :: :: (String,String,String) -- before, matched, after > > > http://www.serpentine.com/blog/2007/02/27/a-haskell-regular-expression-tutorial/ > > [EMAIL PROTECTED]:~/Desktop>thartman_haskell_testing_things > import Data.Test.HUnit > runTestTT $ TestCase $ assertEqual "meh" 1 2 > runTestTT $ TestList [ TestCase $ assertEqual "meh" 1 2 ] > > [EMAIL PROTECTED]:~/Desktop>thartman_haskell_hints > offline documentation: > ghc-pkg describe bytestring | grep -i doc > or probably just > haddock-interfaces: > /usr/local/share/doc/ghc/libraries/bytestring/bytestring.haddock > haddock-html: /usr/local/share/doc/ghc/libraries/bytestring > note to self: > start using cabal install --global (or whatever the flag is) > so all documentation is browsable from one place > > Use language pragmas, with commas > And you can't put LANGUAGE and OPTIONS_GHC in the same pragma > {-# LANGUAGE NoMonomorphismRestriction, PatternSignatures #-} > {-# OPTIONS -fglasgow-exts #-} > > Debugging > > toVal.hs:30:17: > Couldn't match expected type 'blee' > against inferred type 'bleh' > bleh is whatever is at 30:17 > blee is something that's wanted by whatever is calling the value at 30:17 > > If the error is "in the definition of" some function, > then probably one function case conflicts with another, you can > ignore other functions. > In this case you will only get one line:col to look at. > If there are more than one line:col to look at, possibly separate > functions are in conflict. > So, smart to always fix "in the definition of" type errors first. > > Still baffled? Won't compile? > Give top-level functions type signatures. Won't hurt, might help. > :set -fwarn-missing-signatures > or {-# OPTIONS -fwarn-missing-signatures #-} > Start commenting out calling functions until it compiles, and then > look at the signatures. > And then type the signatures in explicitly... does something look funny? > Like, wrong number of args? Maybe currying went wrong. > > tag and bundle a distribution: > darcs tag 0.2 > cabal configure > cabal sdist > cd dist; unzip, verify install does the right thing > http://hackage.haskell.org/packages/upload.html > check upload, and upload. > see also http://en.wikibooks.org/wiki/Haskell/Packaging > > group module imports from multiple modules in one place: > module MyInductiveGraph ( > module Data.Graph.Inductive, > module EnoughFlow > ) > where > import Data.Graph.Inductive > import EnoughFlow > > > > ************************** > 2008/10/11 Justin Bailey <[EMAIL PROTECTED]>: >> All, >> >> I've created a "cheat sheet" for Haskell. It's a PDF that tries to >> summarize Haskell 98's syntax, keywords and other language elements. >> It's currently available on hackage[1]. Once downloaded, unpack the >> archive and you'll see the PDF. A literate source file is also >> included. >> >> If you install with "cabal install cheatsheet", run "cheatsheet" >> afterwards and the program will tell you where the PDF is located. >> >> The audience for this document is beginning to intermediate Haskell >> programmers. I found it difficult to look up some of the less-used >> syntax and other language stumbling blocks as I learned Haskell over >> the last few years, so I hope this document can help others in the >> future. >> >> This is a beta release (which is why I've limited the audience by >> using hackage) to get feedback before distributing the PDF to a wider >> audience. With that in mind, I welcome your comments or patches[2]. >> >> Justin >> >> [1] http://hackage.haskell.org/cgi-bin/hackage-scripts/package/CheatSheet >> [2] git://github.com/m4dc4p/cheatsheet.git >> _______________________________________________ >> 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