Haskell in 100 Seconds
Вставка
- Опубліковано 6 чер 2024
- Haskell is a purely functional programming language based on lambda calculus. It uses immutable values and expressions to produce terse code that is suitable for general-purpose software applications.
#programming #compsci #100SecondsOfCode
🔗 Resources
Haskell Docs www.haskell.org/
Haskell Wiki wiki.haskell.org/
Monad Graphic stackoverflow.com/questions/9...
🔥 Get More Content - Upgrade to PRO
Upgrade to Fireship PRO at fireship.io/pro
Use code lORhwXd2 for 25% off your first payment.
🎨 My Editor Settings
- Atom One Dark
- vscode-icons
- Fira Code Font
🔖 Topics Covered
- Haskell Basics Tutorial
- Functional programming concepts
- Who is Haskell Curry?
- What is Haskell used for?
- What is a Monad? - Наука та технологія
When I learned Haskell at college it felt like if a hardcore Mathematician with zero experience in programming was tasked to design a programming language solely based in the definition of what a programming language is.
Thanks
Sounds like my kind of language 😎
My lord i've to learn haskell in 3 days for a college exam and came here to see if i could undertand a bit better haskell but this language is... estrange😵🤧🤧
@@_david_mp Haskell in 3 days???? Like maybe learn C in 3 days actually doable if you put 72 hours in, but you ain't learning Haskell completely in 3 days mate.
@@I_Love_Waterthey never said learn completely. Just completely enough to pass the exam
For the little more advanced users, here is an interpretation of the IO monad that I really liked:
If you imagine that you put the state of our entire universe in a record World, then IO could be seen as a World Transformer. Thus, a function with side effects simply maps a state of the World to a new one.
For example, putStrLn "Hello World!" takes a World where the screen is blank, and returns a World where "Hello World!" is on the screen :)
I find this interpretation beautiful, and it doesn't violate immutability nor does it need side effects
Yeah that’s a great explanation
Bind just takes the result from a monad action and then inputs it to another function
IO a ~ (Real World) ->(Real World, a)
You are creating Branches in *MULTIVERSE* mate! :)
All this is possible thanks to the runtime that says "I won't do this I/O effect now, but if I were, here's how I'd do it" and never tells the user how the world exactly changed. It would just let the user assume that the world changed in some way to maintain the illusion of "purely functional code" that is somehow useful...
@@SimGunther You mean, The Laziness?
I'm learning Haskell in university this semester. It's quite hard to learn but makes you feel like a wizard when it works 🧙♂
Exactly in the same position, i have my exam tomorrow xd, but then you rage because the code isn't compiling because of a space..
I don't feel like a wizard when it works.
I don't feel like a wizard because it doesn't work :(
I don't wizard like a feel
@@joaquinbonifacino6964 Let the hate flow through you
The problem with Haskell is that once you try it, you never come back
All code written in those imperative object oriented languages is brittle and it sucks
well, hi
i left haskell due to lack of jobs
@@tokiomutex4148 i love assembly btw
@@tokiomutex4148storing state in variables is something I will never forego ever again; haskell sucks balls
Pls try Elixir in 100 seconds. It's a really nice programming language. Great vid tho
Yeah
agree
yes!!!! and you could cover the phoenix framework with it
My fav language to use
Totally agree
Keep up the great content, absolutely love each single video you make!
I like these super quick breakdowns of the language and how to get started. Fantastic series thank you for making it
Functional programming is so cool. Even if you don't like hardcore functional programming, you can still take parts of it and include it into your own code in for example JavaScript.
Avoiding mutable state is always desired in all programming paradigms.
@@embeddor2230 True. Although it's often ignored and not emphasized enough in OO
@@embeddor2230 yet 90% of functional code uses some sort of state monad.
@@marusdod3685 That is not true.
Yes, but it makes me sad that Guido said that python will never have tail calls, so out of the box my two loves can never be brought together :( JS is getting there tho.
Learning Haskell was one of the most fun experiences of my life. Even if you never use it, learning it will expand your mind and make you a better programmer.
Wow that was Rust in my life.. so i should learn Haskell Okay
Is there any particular resource you used to learn Haskell that you can recommend?
@@just-do-halee7375 Haskell is basically Rust with a way better type system, also comes with a garbage collector so you don't have to worry about the compiler complaining for hours about pointer lifetimes
@@hojdog "Learn you a Haskell" was a fun read.
@@marusdod3685 Some might say that having a compiler moan until your code is guarenteed correct is better than relying on a non-deterministic GC.
I would probably give you a hug right now! Thank you for introducing Haskell to the community; 😊
Love your videos man! Your content is indeed fire like your channel logo.
Learning Haskell is an adventure. You're learning about currying, pattern matching etc. and you're like "this is such a cool language".
Then monads just come out of nowhere and hit you like a brick wall.
You arent wrong about crying.
each monad feels like an entirely different programming paradigm
This is exactly what I feel right now lol. I’m taking a course about functional programming this semester
monads?
@@orkhepaj indeed
Amazing! You made it sound incredibly simple, thanks!!
Well, since you set foot in prohibited grounds and decided to scare the normies, now you have no excuse to not make a video about APL.
We'll get there eventually...
YES!!!!!
Nothing better to get in to programing that a language you literalt can't type with your keyboard. Let's get this ball rolling
@@sebastiangudino9377 It's not like our modern OSs can't switch keyboard layouts on the fly. It takes very little time to get used to it.
@@arhamaneeq1323 I mean, i program in dyalog in my free time. I know it's not that big of a deal in practice. But would say that at least for me it did took a long time to get used to it. You can't just throw all this absurd (intuitive one you know then but totally arbitrary when you start) symbols at me and expect me to just start writing code normally.
The learning curve of APL is a little bit absurd. And again, i say this a someone who loves that stupid language
@@sebastiangudino9377 I think with the tab function like those in TryAPL, that is not really that much of a problem.
Or maybe that's because I was just started to get into the field of APL weirdness...
I've only played with Haskell a little bit but the lib that blows me away is Parsec (parsing library).
Being able to write interpreters in code that looks just like the BNF grammar sounds awesome!
( I haven't written one myself yet but have seen small examples.)
Just found this channel a few days ago. The content is AMAZING.
I've been waiting weeks for this! Finally, FINALLY!!
Super cool! I've always been fascinated by Haskell!
Took a class on that in uni and it was actually pretty damn cool. Makes you use your brain a lot more!
Okay, you've gottttt to do APL now. That wonderfully fascinating language deserves your (and our) attention.
no god please no
Awesome, thanks so much! And congratulations on being first video I've ever changed the speed to slower so I can keep up :-D
YAAASSSSSSS. Finally! Been Waiting for this forever.
You finally delivered. Bless.
Currently doing haskell at my uni. Learnt more in this video than in a few weeks worth of lectures.
This was a great video.
I liked it , I'll search more about it
Seeing you got into functional programming maybe do a Prolog or Lisp in 100 seconds :)).
I'm currently studying them in college and I found them a really nice eye opener for functional programming.
There is also OCaml
Isn't Prolog declarative programming though?
I think the main thing is that Prolog is relational/logical, it basically fills in the gap with everything that is true.
X + 2 = 4
X = 2
or, validCourses(CS, X).
X = a valid course, press ; for the next result.
You probably knew that though.
@@begejekan1244 functional programming is a form of declarative programming. But prolog is usually considered a logic programming language, which is another form of declarative programming.
God please, not prolog x)
Love this series
Such a great channel to find out about new things quickly so that I can focus on deciding whether I can utilize it or not in my project. Thanks Fireship!
I am afraid to try Haskell cause I might become a functional nazi and refuse to write any code with side-effects
You'll refuse to write code with side effects that aren't wrapped into monads
me_irl
@@tokiomutex4148 Or maybe he's correct, no side effects at all, and then he just doesn't write code :D
A program with 0 side effects just heats up the CPU, it’s about isolating side effects in your source code.
That would be a side-effect ...
These short videos are good to get to know other technologies you may have never thought looking for.
Please do Prolog next ! :) It's sufficiently different from the others to deserve its place. And more on Haskell would be cool too IMO.
Prolog broke my brain way more than Haskell
Pretty underrated language. I had to learn it a bit for an AI course, but it can be kind of fun for doing basic LeetCode-style questions. It would probably be more fun if I actually learned the difference between the 5 different ways to assign/bind/compare
What made Prolog click for me was strangely enough learning Erlang as the syntax is inspired by Prolog, but slightly easier.
There's nothing quite like Prolog (in all the good senses).
Finishing up my first semester of cs and we used racket, a similar functional programming language. Happy to see some love for functional programming
Great video! Can you make a detailed video about different open source licenses like Apache, GPL, LGPL etc. It will be very helpful to everyone working with open source software and confused about the licenses.
This is really interesting! I recently created a project called Monad to share and discover code snippets, named after a philosophy concept, but it’s cool to see how it’s related to computer science.
Please share your wisdom with us
Thank you doing this! you are the best!!
Oh, and the best part is Hoogle!
If I don't know what function I need but I know what it would need to do, I can roughly describe it by writing it's type (what it should take and what it needs to give me) and I'll get all the functiona that match, (usually only a few, because the types are pretty specific).
Of course searching by name works too
Hoogle rocks!
Explain please blockchan basic programming in one of your shorts. Great work. I really enjoy your videos :)
Would love even course on this subject!
Been learning Haskell for about 2 months now. Shit is maaaadd confusing but it’s really fun once you figure out. Even tho I say that about most languages this one feels even better to get right!
good old haskell I remember having to work on a project with this language in 2013
I always have a lot of fun implementing the peano axioms in lisp-like languages.
Learn you a Haskel for Great Good!
Awesome video as always, I was wondering if you could do Lisp as well?
I started with Hashkell, but never really got to cross the learning barrier, this 100 seconds helped me with that.
Thanks for the heads up, now I know to run when I see this language
Haskell is a super interesting language. I mean you can write quicksort in one line using list comprehensions, you can check for list equality with the good ol ==, and so much. I wouldnt say I'd switch to it from my beloved C and C++, but it's definitely a fun toy language that can be really entertaining to use for coding challenges like advent of code for instance.
darn incredible stuff!
The images for monads are so perfectly describing my time with Haskell monads
First time hearing this language, thanks Fireship for introduce me to more new programming language
Great vid, waiting for Prolog
Should've included a bit more about types such as Maybe, Either. Learn You A Haskell For Great Good is such a cool Haskell book and a proper introduction to the language. It has been years since I used Haskell, but had a lot of fun using it back then. If I ever get some spare time again I might just play around with it again.
Love the animation of Haskel 🤩
Please do extended version with explanation of typeclasses, they are really awesome
These are so perfect for brushing your teeth. I'm never bored and I get to learn a little something. Very glad I found your channel this year. You've taught me a lot!
Yes! finally. I have been waiting for this one!
Still, this is the most procedural and non-functional explaination of haskell i've ever heard :)
Can you suggest any better?
Learning Haskell is awesome, it's totally different world of programming
Great!
Thanks a lot!
Hoping that you can do one of these on ROC when it comes out. Partly functional and very fast
Great video!! Try prolog too please. It's a logic programming language
Love your videos..Please do SCALA !
Best thing of learning Haskell is that you will never finish it. This is a thing with every language of course. But with Haskell is special because depending on your skill level and where you are at the learning curve you will use some tricks or others. Is just like doing Pure Maths, you come up with a trick for a specific problem and refine it further and further until you can define a pattern design or kind of a macro that generalises and then all of a sudden you are solving most of the problems of that field with that. Is much more "abstractable" than other languages.
Nice video!
Topic suggestions: Elixir and Pheonix?
haskell is making me love math
why must it do this to me
I am biased, being a tutor for functional programming/Haskell at uni, but... I believe the functional and "immutable by default" paradigm is crucial for going towards bug-free and reusable (re-combinable) code. Yes, it restricts code in certain ways (e.g. no "x = x + 1"), but these restrictions are extremely sensible and they allow a) the programmer to think more clearly (mathematically) and b) the compiler/runtime system to make powerful checks, guarantees and optimizations.
For those wondering how incrementing a value a ("x = x + 1") would work in Haskell: You just introduce a new+different name for the new+different value - e.g. "y = x + 1"
@Fireship
What software do you use to make these awesome videos?
I learned it in very hard time in just two weeks, at the time i hated it but i really enjoy functional programming, after that i really liked haskell and enjoy it
Fireship on fire 🔥. Great video 👍🏻
Yep, pretty much this. ^
I'd just add, that *all* the expressions and -variables- named expressions really evaluate to a single value. That includes the `main`!
So for example, since both `print 5` and `print "Hello World"` have the type `IO ()`, you can glue them together into one single value and assign it to `main`.
In that case, `main` would be an IO value that prints 5 and then prints the Hello World.
What's awesome is that these really behave like regular values. You can juggle them around, put them in lists, etc. and they will do absolutely nothing until one shows up in `main`. Only then, the compiler will make it actually do stuff.
I did Haskell for a total of 1 assignment in college and I thought it was really cool. He gave us a definition for a Lambda calculus expression to be stored as a variable, and then step by step got us `to write all the functions necessary to perform a beta reduction on any lambda calculus expression (if I'm remembering right)
The definition was something like the form: `Term = Lambda Term | Application Term Term | Var 'x'`, so you could represent any lambda calculus expression with that by replacing "Term" with any of the 3 possible values for Term recursively
e.g. Application (Lambda Var 'x') (Application Var 'x' Var 'y')
And then we'd just pass that expression into whatever function we're calling it for
e.g. beta-reduce (Application (Lambda Var 'x') (Application Var 'x' Var 'y'))
The only fear I have in life is 100 seconds videos just stopping. Please keep em coming i love em.
OMG YESS!!!!!!!!!!!!!!!!!!!! thank you!!!!!!!!! lemme grab some popcorn for 100 seconds
NICELY DONE !
- Data Scientist Mark in North Aurora IL
"Oh wow, that's really interesting"
*never uses Haskell in my life*
Didn't expect this
There is also Clean IDE which is studied in ELTE. Everyone hate this subject although it is pretty fun
I think haskells true strength is in its ecosystem. Hoogle and cabal/stack + vscode language integration make everything so much easier. If i need some utility functions or just don't want to implement some algorithm i just use a library by writing single line in my cabal config. I don't think any other language can compete in terms of ecosystem usability.
Look into npm, cargo or pip, many options for doing that
Ahhh, Haskell and Prolog gave me a really fun semester. :$
Do a deeper dive into functional concepts!
great explanation
can you cover apache groovy ? , love this series !!
What do you think of the FORTH environment? its a language, OS, interpreter, and IDE all in one. its kinda neat. is used reverse polish notation. old but still cool (unlike COBOL)
Man the Haskell type system is so nice. If the program type checks there is a 95% chance that it works.
Omg he actually did it
Haskell looks really scary with it's exotic syntax. Thanks for the good video.
I looked this up on youtube a couple days ago to see if you did it, and here we are.
The most beautiful and hard way to write top quality software
Btw setting up Haskell’s basic tooling is easy these days. Just grab ghcup and you can manage the compiler/LSP server/build tool versions.
I imagine they stole this idea from Rust.
Finally! Haskell!
Question (not criticism)!
Given the extremely limited time available (which is a very interesting format, btw!) What's the guiding principle to spend the time on "Haskell is a functional language, and here's where that means in general" versus "here's the Maybe type and, yeah, you can use all the Monad stuff on it!"
There's no time set aside for type classes or higher order types, which is where Haskell improves on the world compared to, say, ML or Erlang. What's your goal function for what to include/cut?
Would you describe C++ without virtual functions or templates? Or without pointers? Or without standard library? (In fact, I'll go see if there is a C++ one right now!) I'm genuinely curious about the process of squeezing into such a tiny box!
(Looking forward to "process of making 100 second videos in 100 seconds!")
The trouble with haskell is, first you don't know it and it feels awful. Then, once you learn it well, suddenly every other language feels awful.
Jeff is still my favourite tech youtuber!
Great video! What is the name of the music?
A video on clojure and elm? Maybe racket?
My brain just crashed.
Scala in 100 seconds would be good to see, Functional programming on the JVM, very cool :)
Awesome! Well done! Can you do BQN in 100 seconds? :)
Great videos: What about a video on Scala in 100 seconds?
Ummm .... I don't know if this is asking too much, but could you do Eiffel? This language came along about 20 years ago and attracted a lot of interest due to its concept of *contracts* but it never became popular. I'm curious what other languages picked up from Eiffel.
Great video. Just so you know Haskell has a string type which is literally just an alias for a list of characters
You can use any other string implementations you want depending on your use case
epic 🔥🔥🔥
Can you make a video about monads sometime?
Please make a video on Ocaml and F#