Day 3: Haskell

TLDR : Youtube for the win

So I started watching this youtube series on Haskell, and I must admit it’s pretty good. Looks like I found another source to learn from.

  • The below code apparently shows us the type of the function. I haven’t been able to replicate it in VSCode, so I’ll check on the terminal later.
:t (+)
  • Different ways of defining a recursive factorial function.
fact :: Integer -> Integer
fact 0 = 1
fact n = n * fact(n-1)

fact1 :: Integer -> Integer
fact1 n = if n <= 1 then 1 else n*fact1(n-1)
fact2 :: Integer -> Integer
fact2 n | n <= 1 = 1
| otherwise = n*fact2(n-1)

I skipped over some usage of a combination of the where clause and guards. I’ll try to implement it later if possible.

  • Lists can only have one type (something I figured out through trial and error before).
  • Basic List creation function
produceList n m | m<n = []
| m == n = [m]
| m > n = n : produceList (n+1) m

Basically, recursively making lists. The semicolon in

n : []

basically means that we’re appending the value n to the beginning of the list.

Something like

1:2:3:4:[]

is equal to

[1,2,3,4]

You’ll also likely get a “Pattern Matches are Inexhaustive” error. Not sure if it’s wrong, but the funtion works anyway for now.

  • List functions

Any function that returns a list will return a copy of the list, since data types in haskell are immutable

Head : Returns the first element of the list.

Tail : Returns all the elements of the list other than the first one.

length : Come on.

init : Returns the list without the last element

null : check if list is empty

head (produceList 1 10)tail (produceList 1 10)length (produceList 1 10)init (produceList 1 10) null (produceList 1 0))
  • List comprehensions!

If you’ve used python, you already know. Nice to see all my knowledge not go to waste.

  • Basic List Addition function
sum1 [] = 0
sum1 (x:xs) = x + sum xs
sum2 xs = foldr (*) 1 xs

The first one is basic, however the second one is what is suggested by Haskell (or some extension I installed. Can’t tell, no difference).

Note: Learning Haskell is kind of a pain in the ass, but I must admit that my mind is already racing to stuff I can do cleanly. My college assignments come to mind, and so does my number theory class. I wanted to write a program to calculate that stuff, but I must admit that I felt defeated initially. Looks like I’ll have another go at it.

--

--

I do stuff. Like stuff about policy. And book stuff. And gaming stuff. And stuff about life. And stuff about stuff.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store