Skip to content

2024

Understand Monad Transformers(2)

This is a reading notes from the great book named book of monads. It helps me a lot and I quite recommend you to read it if you have any plan to read books about haskell monads.

This is the following article after understand monad transformers as there are some confusions and missing points in the previous blog.

Previous blog focused on when to use monad transformers, and how we understand the monad transformer creates a new powerful monad which supports both monadT and underlying monad features.

After several months, I would rather to say it didn't point out the core part of monad transformer, which is how the monad transformer supports the underlying monad functionalities via type class.

  • what's the problem of stacking monads(the reason why we need monad transformer)
  • why we can use features from both monad and monad transformer under the scope of monad transformer.

Onboarding Parsec Library from Self-Defined Parser

Previously, I used my own parser to parse the solidity language syntax and finished the expression part. It's a combination of ExceptT and State to maintain the states and report error.

type ErrMsg = Text

type Parser a = ExceptT ErrMsg (State Text) a

The original parser doesn't have error report at all, and it definitely is not the correct way. Moreover, I believe the open source parser library works better than mine as i'm still newbie to haskell. Hence, I choose to replace my custom parser by the parsec parser.

This blog introduces the investigation of parsec and the problems I encountered during migration. Beside them, I will compare some pattern differences between parsec and mine.

Go List Command and x/mod Package

This blog try to introduce the go list command and brief a refinement at go1.16. Moreover, we will explore the differences between go list -m all and go list all, and answer question why some of the module from go list -m all cannot be found by go mod why.

Finally, we will see the x/mod package and when it's useful.

Practice of Dev Tool Version Control

This blog focuses on some practices to manage development dependencies, not library dependencies. Hence, it's not a blog to introduce how Go, Cpp or Rust compiler resolves the libraries to build or the linker finds the dll for linking.

Instead, it talks about how do we manage the tools during development. For example, when using protoc along with its several plugins, how to ensure all CLI tools are used as desired everywhere?