Skip to content

Instantly share code, notes, and snippets.

{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeOperators #-}
module GenericIso where
import Data.Coerce
import GHC.Generics
@RyanGlScott
RyanGlScott / bench-builder-all-HEAD-revert.txt
Created December 22, 2016 21:41
Benchmarking vinyl with GHC HEAD before and after reverting commit 1722fa106e10e63160bb2322e2ccb830fd5b9ab3
$ ./dist/build/bench-builder-all/bench-builder-all
benchmarking flat
time 4.075 µs (4.061 µs .. 4.092 µs)
1.000 R² (0.999 R² .. 1.000 R²)
mean 4.108 µs (4.098 µs .. 4.140 µs)
std dev 54.60 ns (2.279 ns .. 114.0 ns)
variance introduced by outliers: 10% (moderately inflated)
benchmarking vinyl
time 62.27 µs (62.25 µs .. 62.28 µs)
@RyanGlScott
RyanGlScott / bench-results-current.txt
Last active February 23, 2017 15:15
hashable: inlinePerformIO (current) vs. unsafeDupablePerformIO (proposed)
$ cabal bench
Preprocessing benchmark 'benchmarks' for hashable-1.2.5.0...
Running 1 benchmarks...
Benchmark benchmarks: RUNNING...
benchmarking hashPtr/5
time 3.960 ns (3.959 ns .. 3.961 ns)
1.000 R² (1.000 R² .. 1.000 R²)
mean 3.960 ns (3.959 ns .. 3.962 ns)
std dev 3.764 ps (2.231 ps .. 5.785 ps)
@RyanGlScott
RyanGlScott / DataCast.hs
Last active February 24, 2017 22:05
An attempt at making a new default for dataCast1 without restricting poly-kinds.
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE TypeOperators #-}
module Main where
FROM fpco/stack-build:lts-5.16
MAINTAINER Ryan Scott
RUN apt-get update && apt-get install -y \
faketime
ADD lorem-ipsum.txt /root/lorem-ipsum.txt
ADD entrypoint.sh /root/entrypoint.sh
RUN chmod +x /root/entrypoint.sh
This file has been truncated, but you can view the full file.
Archive member included to satisfy reference by file (symbol)
C:\Users\RyanGlScott\Software\ghc-8.0.1-x86\lib\base-4.9.0.0/libHSbase-4.9.0.0.a(Base__165.o)
(base_ControlziExceptionziBase_nonTermination_closure)
C:\Users\RyanGlScott\Software\ghc-8.0.1-x86\lib\base-4.9.0.0/libHSbase-4.9.0.0.a(Base__166.o)
(base_ControlziExceptionziBase_nestedAtomically_closure)
C:\Users\RyanGlScott\Software\ghc-8.0.1-x86\lib\base-4.9.0.0/libHSbase-4.9.0.0.a(Base__167.o)
C:\Users\RyanGlScott\Software\ghc-8.0.1-x86\lib\base-4.9.0.0/libHSbase-4.9.0.0.a(Base__166.o) (base_ControlziExceptionziBase_NestedAtomically_closure)
C:\Users\RyanGlScott\Software\ghc-8.0.1-x86\lib\base-4.9.0.0/libHSbase-4.9.0.0.a(Base__168.o)
C:\Users\RyanGlScott\Software\ghc-8.0.1-x86\lib\base-4.9.0.0/libHSbase-4.9.0.0.a(Base__165.o) (base_ControlziExceptionziBase_NonTermination_closure)
Running aeson-benchmark-dates...
benchmarking decode/UTCTime/whole
time 16.89 μs (16.86 μs .. 16.95 μs)
1.000 R² (1.000 R² .. 1.000 R²)
mean 16.90 μs (16.87 μs .. 16.95 μs)
std dev 112.0 ns (60.86 ns .. 183.7 ns)
benchmarking decode/UTCTime/fractional
time 17.86 μs (17.85 μs .. 17.88 μs)
1.000 R² (1.000 R² .. 1.000 R²)
@RyanGlScott
RyanGlScott / GADTSingletons.hs
Last active October 21, 2019 10:15
How to singletonize GADTs (requires GHC 8.2 or later)
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeFamilyDependencies #-}
@RyanGlScott
RyanGlScott / NewGenerics.hs
Created June 6, 2017 16:30
Fleshing out a new design for Generic1 that doesn't use Functor contexts for derived instances, but rather Coercible.
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
-- | Fleshing out a new design for Generic1 that doesn't use Functor contexts
-- for derived instances, but rather Coercible. Why would we want this?
-- Consider this derived Generic1 instance:
--
-- data T f a = T (f [a]) deriving Generic1
@RyanGlScott
RyanGlScott / SGenerics.hs
Last active November 20, 2018 10:01
Type-level GHC.Generics
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE EmptyCase #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilyDependencies #-}