diff options
Diffstat (limited to 'haskell.html.markdown')
| -rw-r--r-- | haskell.html.markdown | 41 | 
1 files changed, 28 insertions, 13 deletions
| diff --git a/haskell.html.markdown b/haskell.html.markdown index 936744a0..4ce1a839 100644 --- a/haskell.html.markdown +++ b/haskell.html.markdown @@ -189,16 +189,16 @@ 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 4, and then returns the final value. -foo = (*4) . (+10) +foo = (4*) . (10+) --- (5 + 10) * 4 = 60 +-- 4*(10 + 5) = 60  foo 5 -- 60  -- fixing precedence @@ -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 | 
