diff options
| author | David Hsieh <davidhsiehlo@gmail.com> | 2016-03-11 08:39:55 -0600 | 
|---|---|---|
| committer | David Hsieh <davidhsiehlo@gmail.com> | 2016-03-11 08:39:55 -0600 | 
| commit | ceb99e14019672309ca80350054b7bb1a6642a48 (patch) | |
| tree | 1cca5af13a146c0a36ef760b6264d18875290ec0 /haskell.html.markdown | |
| parent | 51c2f7ce28caf1cc654bcafc4063f3012cc2f0c3 (diff) | |
| parent | 8d1e2e31ef9c62e2833ccb83cde78caef668f044 (diff) | |
Merge branch 'adambard-master' into r-spanish
Diffstat (limited to 'haskell.html.markdown')
| -rw-r--r-- | haskell.html.markdown | 47 | 
1 files changed, 31 insertions, 16 deletions
| diff --git a/haskell.html.markdown b/haskell.html.markdown index 369b1b20..4ce1a839 100644 --- a/haskell.html.markdown +++ b/haskell.html.markdown @@ -81,7 +81,7 @@ not False -- True  [5,4..1] -- [5, 4, 3, 2, 1]  -- indexing into a list -[0..] !! 5 -- 5 +[1..10] !! 3 -- 4  -- You can also have infinite lists in Haskell!  [1..] -- a list of all the natural numbers @@ -189,17 +189,17 @@ foo = add 10 -- foo is now a function that takes a number and adds 10 to it  foo 5 -- 15  -- Another way to write the same thing -foo = (+10) +foo = (10+)  foo 5 -- 15  -- function composition --- the (.) function chains functions together. +-- the operator `.` chains functions together.  -- For example, here foo is a function that takes a value. It adds 10 to it, --- multiplies the result of that by 5, and then returns the final value. -foo = (*5) . (+10) +-- multiplies the result of that by 4, and then returns the final value. +foo = (4*) . (10+) --- (5 + 10) * 5 = 75 -foo 5 -- 75 +-- 4*(10 + 5) = 60 +foo 5 -- 60  -- fixing precedence  -- Haskell has another operator called `$`. This operator applies a function  @@ -222,7 +222,7 @@ even . fib $ 7 -- false  -- 5. Type signatures  ---------------------------------------------------- --- Haskell has a very strong type system, and everything has a type signature. +-- Haskell has a very strong type system, and every valid expression has a type.   -- Some basic types:  5 :: Integer @@ -259,7 +259,7 @@ case args of    _ -> putStrLn "bad args"  -- Haskell doesn't have loops; it uses recursion instead. --- map applies a function over every element in an array +-- map applies a function over every element in a list  map (*2) [1..5] -- [2, 4, 6, 8, 10] @@ -279,7 +279,7 @@ foldl (\x y -> 2*x + y) 4 [1,2,3] -- 43  -- This is the same as  (2 * (2 * (2 * 4 + 1) + 2) + 3) --- foldl is left-handed, foldr is right- +-- foldl is left-handed, foldr is right-handed  foldr (\x y -> 2*x + y) 4 [1,2,3] -- 16  -- This is now the same as @@ -318,7 +318,7 @@ Nothing         -- of type `Maybe a` for any `a`  -- it is not hard to explain enough to get going.  -- When a Haskell program is executed, `main` is --- called. It must return a value of type `IO ()`. For example: +-- called. It must return a value of type `IO a` for some type `a`. For example:  main :: IO ()  main = putStrLn $ "Hello, sky! " ++ (say Blue) @@ -361,7 +361,7 @@ sayHello = do  -- You can think of a value of type `IO a` as representing a  -- computer program that will generate a value of type `a`  -- when executed (in addition to anything else it does). We can --- store and reuse this value using `<-`. We can also +-- name and reuse this value using `<-`. We can also  -- make our own action of type `IO String`:  action :: IO String @@ -401,11 +401,26 @@ main'' = do  let foo = 5 --- You can see the type of any value with `:t`: +-- You can see the type of any value or expression with `:t`: ->:t foo +> :t foo  foo :: Integer +-- Operators, such as `+`, `:` and `$`, are functions. +-- Their type can be inspected by putting the operator in parentheses: + +> :t (:) +(:) :: a -> [a] -> [a] + +-- You can get additional information on any `name` using `:i`: + +> :i (+) +class Num a where +  (+) :: a -> a -> a +  ... +    -- Defined in ‘GHC.Num’ +infixl 6 + +  -- You can also run any action of type `IO ()`  > sayHello @@ -417,7 +432,7 @@ Hello, Friend!  There's a lot more to Haskell, including typeclasses and monads. These are the  big ideas that make Haskell such fun to code in. I'll leave you with one final -Haskell example: an implementation of quicksort in Haskell: +Haskell example: an implementation of a quicksort variant in Haskell:  ```haskell  qsort [] = [] @@ -426,7 +441,7 @@ qsort (p:xs) = qsort lesser ++ [p] ++ qsort greater            greater = filter (>= p) xs  ``` -Haskell is easy to install. Get it [here](http://www.haskell.org/platform/). +There are two popular ways to install Haskell: The traditional [Cabal-based installation](http://www.haskell.org/platform/), and the newer [Stack-based process](https://www.stackage.org/install).  You can find a much gentler introduction from the excellent  [Learn you a Haskell](http://learnyouahaskell.com/) or | 
