View EasyFile.hs
-- | Easy file operations, not in the sense of "good" or "simple",
-- but in the sense of "adapted for common use cases".
module EasyFile where
import Protolude
import qualified Data.ByteString as BS
import qualified Data.Text as T
import System.Directory (removeFile)
import System.IO.Error (isDoesNotExistError)
View gist:47c41c080ea4037ea0faae10dcccfc3b
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32744 bytes for ChunkPool::allocate
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full

At work, I just spent the last few weeks exploring and evaluating every format I could find, and my number one criteria was whether they supported sum types. I was especially interested in schema languages in which I could describe my types and then some standard specifies how to encode them using an on-the-wire format, usually JSON.

  1. Swagger represents sum types like Scala does, using subtyping. So you have a parent type EitherIntString with two subtypes Left and Right represented as {"discriminator": "Left", value: 42} and {"discriminator": "Right", value": "foo"}. Unfortunately, unlike in Scala in which the parent type is abstract and cannot be instantiated, in Swagger it looks like the parent type is concrete, so when you specify that your input is an EitherIntString, you might receive {"discriminator": "EitherIntString"} instead of one of its two subtypes.
  2. JSON-schema supports unions, which isn't quite the same thing as sum types because


The JSON Schema spec doesn't speak on error construction at all (which is absolutely the right decision).

This means that each library author has to figure out how to construct informative errors individually.

This document is meant to sketch out some best practices.


View stack haddock issue
Version 1.1.2 x86_64 hpack-0.14.1
2016-08-06 21:11:59.162271: [debug] Checking for project config at: /home/traveller/code/mine/tf-random/stack.yaml @(stack-1.1.2-DgLojysm1GF2dDrMpykv6D:Stack.Config src/Stack/Config.hs:811:9)
2016-08-06 21:11:59.163222: [debug] Loading project config file stack.yaml @(stack-1.1.2-DgLojysm1GF2dDrMpykv6D:Stack.Config src/Stack/Config.hs:829:13)
2016-08-06 21:11:59.166053: [debug] Using a nix-shell environment from file: /home/traveller/code/mine/tf-random/shell.nix @(stack-1.1.2-DgLojysm1GF2dDrMpykv6D:Stack.Nix src/Stack/Nix.hs:111:6)
2016-08-06 21:11:59.166215: [debug] Run process: nix-shell --pure /home/traveller/code/mine/tf-random/shell.nix --run "'/nix/store/i4nrh5f31a67ijpn9vf587lrlssg5mgq-stack-1.1.2/bin/stack' $STACK_IN_NIX_EXTRA_ARGS '--internal-re-exec-version=1.1.2' 'haddock' '--verbose'" @(stack-1.1.2-DgLojysm1GF2dDrMpykv6D:Stack.Exec src/Stack/Exec.hs:64:5)
Version 1.1.2 x86_64 hpack-0.14.1
2016-08-06 21:12:00.438458: [debug] Checking for project config at: /home/t