Rolling Your Own Blockchain in Haskell
I like the idea behind this article, but this isn't the way to do it. It hides the simplicity of the blockchain concept behind arcane syntax and overly complicated higher-order typing constructs.<p><pre><code>    newtype BlockF a = Block (V.Vector a) deriving (Eq, Show, Foldable, Traversable, Functor, Monoid)
    type Block = BlockF Transaction

    type Blockchain = Cofree MerkleF Block
</code></pre>
Does anyone really think this is how one should write software? I think that constructions like Cofree are interesting, but I don't think they're programming.