Advantages and disadvantages of each are explored here.
- Support arbitrary number of fields
- Supports projecting and narrow and things like that quite well
Disclaimer: This piece is written anonymously. The names of a few particular companies are mentioned, but as common examples only.
This is a short write-up on things that I wish I'd known and considered before joining a private company (aka startup, aka unicorn in some cases). I'm not trying to make the case that you should never join a private company, but the power imbalance between founder and employee is extreme, and that potential candidates would
Disclaimer 1: Type classes are great but they are not the right tool for every job. Enjoy some balance and balance to your balance.
Disclaimer 2: I should tidy this up but probably won’t.
Disclaimer 3: Yeah called it, better to be realistic.
Type classes are a language of their own, this is an attempt to document features and give a name to them.
I had always been confused by Haskell's implementation of existential types. Until now!
Existential types is the algebraic data type (ADT) equivalent to OOP's data encapsulation. It's a way of hiding a type within a type. Hiding it in such a way that any consumer of the data type won't have any knowledge on the internal property
| {-# LANGUAGE GeneralizedNewtypeDeriving #-} | |
| import Control.Monad.IO.Class | |
| import Control.Monad.Trans.Class | |
| import Prelude hiding (log) | |
| -------------------------------------------------------------------------------- | |
| -- The API for cloud files. | |
| class Monad m => MonadCloud m where | |
| saveFile :: Path -> Bytes -> m () |
| -- in reply to http://www.reddit.com/r/haskell/comments/21mja6/make_lllegal_state_transitions_unrepresentable/ | |
| -- | |
| -- We implement a tiny language with three commands: Open, Close, and Get. | |
| -- The first Get after an Open returns 1, the second Get returns 2, and so on. | |
| -- | |
| -- Get is only valid while the state is open, and | |
| -- Open must always be matched by a Close. | |
| -- We enforce both restrictions via the type system. | |
| -- | |
| -- There are two valid states: Opened and Closed. |
| /* | |
| * I add this to html files generated with pandoc. | |
| */ | |
| html { | |
| font-size: 100%; | |
| overflow-y: scroll; | |
| -webkit-text-size-adjust: 100%; | |
| -ms-text-size-adjust: 100%; | |
| } |