Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    F

    FP Complete Blog

    fpcomplete.com · Company blog · on HN since 2012

    The blog of FP Complete, a Haskell consultancy, with tutorials on Haskell and Rust and functional programming concepts.

    Visit blogHN submissions
    Languages & CompilersProgrammingDevOps & Cloud
    What HN says

    Commenters recommend it for Haskell tutorials with live code and its School of Haskell, though one says the company downplays Haskell in favor of buzzwords.

    Stats for nerds
    201HN people shared it
    179linked in comments
    3.5Kstory points
    Dec 2024last shared
    2012people per year2024

    Top posts on HN

    1. 1
      Monads and GATs in Nightly Rust
      6 people · 198 points · first shared 2020 · 171 comments on HN
    2. 2
      Lenses
      1 person · 192 points · first shared 2022 · 96 comments on HN
    3. 3
      School of Haskell Goes Beta
      2 people · 182 points · first shared 2013 · 69 comments on HN
    4. 4
      School of Haskell 2.0
      1 person · 174 points · first shared 2015 · 14 comments on HN
    5. 5
      Iterators and Streams in Rust and Haskell
      2 people · 167 points · first shared 2017 · 41 comments on HN
    6. 6
      Haskell and Rust
      3 people · 166 points · first shared 2018 · 129 comments on HN
    7. 7
      Stack – a Haskell development tool
      2 people · 161 points · first shared 2015 · 36 comments on HN
    8. 8
      Why is Stack not Cabal?
      2 people · 152 points · first shared 2015 · 19 comments on HN
    9. 9
      Programming With Types, Not Tutorials
      2 people · 147 points · first shared 2014 · 115 comments on HN
    10. 10
      Mastering Time-to-Market with Haskell
      2 people · 143 points · first shared 2016 · 116 comments on HN

    What HN people wrote when they linked it

    • sshineJul 2024

      Amazing survey.

      Big fan of property testing.

      A particularly big fan of Hedgehog.

      I tried writing a Hedgehog-inspired library in Rust and realized how complex the underlying domain is.

      For example, the RNG is "splittable" [1][2] which means you can take a deterministic seed and split it in two, e.g. for parallel generators to work independently but still deterministically. The effort that has gone into this feature level is a little numbing. I have an awe similar to that of the "fast inverse square root" hack when I see code like this:

      -- | A predefined gamma value's needed for initializing the "root" instances of -- 'Seed'. That is, instances not produced by splitting an already existing -- instance. -- -- We choose: the odd integer closest to @2^64/φ@, where @φ = (1 + √5)/2@ is -- the golden ratio. -- goldenGamma :: Word64 goldenGamma = 0x9e3779b97f4a7c15 when realizing that those numbers don't come easily. [3]

      [1]: https://hackage.haskell.org/package/hedgehog-1.4/docs/src/Hedgehog.Internal.Seed.html#Seed

      [2]: https://gee.cs.oswego.edu/dl/papers/oopsla14.pdf

      [3]: https://github.com/hedgehogqa/haskell-hedgehog/issues/191

      Wonder why most property-testing libaries don't have features like this?

      The libraries require training to use. And they're not that easy to write.

      > the current state-of-the-art when it comes to property-based testing is stateful testing via a state machine model and reusing the same sequential state machine model…

    • instig007Dec 2024

      > https://tech.fpcomplete.com/haskell/tutorial/operators/

      You're a prime example of a person who reads a page on the Internet and takes it at a face value without understanding the meaning and the context behind the words:

      > One of the most common operators, and source of initial confusion, is the $ operator. All this does is apply a function.

      Did you miss the part that says "All this does is apply a function"?

      Here's how you define (+) among other things: https://hackage.haskell.org/package/ghc-internal-9.1201.0/docs/src/GHC.Internal.Num.html#%2B

      instance Num Int where I# x + I# y = I# (x +# y) whereas (+#) is defined as a bridge from unboxed ints provided by the runtime to their efficient low-level machine representation, accomodating all instances of a data type defined as `Int = I# Int#` (the left-hand side is the name of the type, the right-hand side is the name of a constructor that accepts a single value of type Int# - the low-level primitive provided by the GHC implementation).

      The (+) in `I# x + I# y =` is a function definition in infix form. That's the same form you can use for any other infix function if you wish so:

      ghci> a `iAmHelping` b = a b + b ghci> :t iAmHelping iAmHelping :: Num a => (a -> a) -> a -> a > Oh you mean the things that look like operator, behave like operators

      Let me see your regular operators do the following, then we talk:

      plus = (+) a = (2 +) c = (2 `plus`) c' = plus 2 d =…

    • nlanderFeb 2017

      I strongly recommend that you learn Haskell.

      I have some reasons to back up my endorsement of Haskell.

      First and foremost, Haskell is the best language to learn if you want to learn about functional programming. Why? Because Haskell is the quintessential functional programming language. It is approaching 30 years of age and was originally developed back when functional programming was nowhere to be found in production settings. A bunch of academics who were all working on separate functional programming languages got together and said, “hey, how about we all work together and make the ultimate FP language rather than reinventing the wheel on our own?” And that’s exactly what they did. The result today is a very mature, feature rich and programmer-friendly language. If you really want to delve into the history of Haskell, check out this paper or watch the video based on it:

      https://www.microsoft.com/en-us/research/publication/a-history-of-haskell-being-lazy-with-class/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Fsimonpj%2Fpapers%2Fhistory-of-haskell%2F

      The second reason to learn Haskell is that it is a great language for doing the things you want to do. A prominent Haskeller, Gabriel Gonzalez, estimates that Haskell is mature in the domain of server-side web development. Check out his view on the state of the Haskell ecosystem:

      https://github.com/Gabriel439/post-rfc/blob/master/sotu.md#server-side-programming

      Writing CLI programs is also rated…

    • simcop2387Dec 2018

      Even with Haskell you can still have deadlocks [1]. They give you the tools to write code that you can prove won't have them, but restricting the kinds of programs you can write. But it's an opt-in thing, it's not a promise of the language that you can't do it. Rust is trying to do a similar thing, but it's still also possible to write yourself into a corner with deadlocks if you work against the feature.

      Another language I saw recently that has this promise was Pony which uses an actor and message passing model to try to accomplish this but it doesn't actually prevent you from hitting the case, instead it'll just kill a random actor until the deadlock is gone [2]. This can work but it needs to be up front that you MUST write your software to be ready to be killed at any time and continue to function.

      It's really an impossible situation to completely "solve", given that doing so would require a solution to the halting problem. So it's always a fun place for me to start looking at any new language if they talk about locks and dead-locks. So far I think Haskell and Rust (and probably other ML family) have the best balance being struck since you can opt in to statically proving this if you restrict those parts of your program but you're not required to do so by the language itself.

      [1] https://www.fpcomplete.com/blog/2018/05/pinpointing-deadlocks-in-haskell
      [2] https://news.ycombinator.com/item?id=9485333

    • mcbuilderJul 2016

      It's not just people at FP Complete `et al` who were frustrated with cabal-install. Cabal-hell was the number one problem with using Haskell for commercial projects, as a majority of people responded who took part in a FP Complete Haskell organized survey (this was before stack was officially released), https://www.fpcomplete.com/blog/2015/05/thousand-user-haskell-survey. I wrote that survey, if you want to discuss methodology I would be happy to. Anecdotally, after contacting by email most of the respondents, very few complained of a fragmentation the community by virtue of stack being released. We could argue all day over about arguments on reddit, but data suggests otherwise.

      FP Complete is a commercial consulting firm now targeting life science companies. We use Haskell because we believe it is the best modern language for robust high-performance software. It is not our goal to own the Haskell ecosystem. It is our goal to promote Haskell use and to develop reliable tooling. Do people feel the same way about continuum analytics for releasing Anaconda and special versions of numpy?

    • NullSetOct 2012

      The problem with packages and Haskell is well known; there are a few camps currently trying to solve the issue. Personally, (although the author went about things in a rather roundabout way) I can feel for the author. I LOVE Haskell, I cannot think of a better language for prototyping crazy ideas in and I work in it every chance that I get; that being said, its awful to get up and running with cabal. The suggestion which has been posed to me is "simply use cabal-dev", when I do this, I wind up with crazy huge project files because of repeat installs. I sincerely hope that someone much smarter than myself can come up with a solution for this; I think it is a primary reason why Haskell is not being more widely adopted.

      References(for those who are interested)
      http://www.yesodweb.com/blog/2012/04/replacing-cabal
      http://www.yesodweb.com/blog/2012/03/cabal-nirvana

      Hopefully the guys at FP complete will redirect some of their focus onto this (please oh please).
      http://fpcomplete.com/

    Related

    Haskell for Allhaskellforall.com190 people

    The category design pattern

    Haskell for All
    Personal · last shared 2026
    Bryan O'Sullivanserpentine.com49 people

    Github is making me feel stupid(er)

    Bryan O'Sullivan
    Personal · last shared 2021
    Well-Typed Blogwell-typed.com60 people

    Falsify: Hypothesis-Inspired Shrinking for Haskell (2023)

    Well-Typed Blog
    Company · last shared 2026
    Oliver Charlesocharles.org.uk45 people

    How I develop with Nix

    Oliver Charles
    Personal · last shared 2019
    Matt Parsonsparsonsmatt.org57 people

    Write Junior Code

    Matt Parsons
    Personal · last shared 2026
    Patrick Thomsonblog.sumtypeofway.com15 people

    An Introduction to Recursion Schemes (2014)

    Patrick Thomson
    Personal · last shared 2024
    Simon Marlowcommunity.haskell.org/~simonmar17 people

    Parallel and concurrent Haskell, Marlow [[PDF slide deck]]

    Simon Marlow
    Personal · last shared 2017
    Michael Snoymansnoyman.com52 people

    Haskell: The Bad Parts, part 2 (2020)

    Michael Snoyman
    Personal · last shared 2024