
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
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 :)
**************************
thartman@thartman-laptop:~/Desktop>thartman_haskell_oneliners ghc -e '1+2'
thartman@thartman-laptop:~/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-tutor...
thartman@thartman-laptop:~/Desktop>thartman_haskell_testing_things import Data.Test.HUnit runTestTT $ TestCase $ assertEqual "meh" 1 2 runTestTT $ TestList [ TestCase $ assertEqual "meh" 1 2 ]
thartman@thartman-laptop:~/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
: 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