Haskell Notes for old farts
Name reminds me of Leave It to Beaver
not-equals is /= instead of !=
LHFGG says ++ implementation has O(|left|) concatenation instead of O(1).
Look for a streams implementation. (see "comprehension" below)
colon is the cons operator
list.get(x) is !! x
car/cdr is head/tail
last/butlast is last/init
cddddr is drop 4 (where 4 is the count of d's) so tail is drop 1
max and min are spelled out
[x..y] specifies a range with step +1
[x,x2..y] specifies a range with step (x2-x1)
.. works for floats
map-filter combo is call a "comprehension"
[expression | x<-[range], constraint]
The following works, so cons-stream is lazy as it should be
Multiple ranges does a walk of all combinations with first list incrementing most slowly and so on.
underscore is used both as a void type and /dev/null for values
If an = without a let a function declaration?
not-equals is /= instead of !=
LHFGG says ++ implementation has O(|left|) concatenation instead of O(1).
Look for a streams implementation. (see "comprehension" below)
colon is the cons operator
list.get(x) is !! x
car/cdr is head/tail
last/butlast is last/init
cddddr is drop 4 (where 4 is the count of d's) so tail is drop 1
max and min are spelled out
[x..y] specifies a range with step +1
[x,x2..y] specifies a range with step (x2-x1)
.. works for floats
map-filter combo is call a "comprehension"
[expression | x<-[range], constraint]
func x y
can be syntactic sugared as x `func` y
let
makes variables (scope?)The following works, so cons-stream is lazy as it should be
let nats = [1,2..]
let evens = [2*x | x<-nats]
let bomb = nats ++ evens
take 4 bomb
Multiple ranges does a walk of all combinations with first list incrementing most slowly and so on.
underscore is used both as a void type and /dev/null for values
If an = without a let a function declaration?
let expr = value
myFunc arg = value