Skip to content

Instantly share code, notes, and snippets.

🍓
playing celeste

Chris Parks cdparks

🍓
playing celeste
Block or report user

Report or block cdparks

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@cdparks
cdparks / sqlQQ.md
Created Jan 17, 2019
What is sqlQQ really doing
View sqlQQ.md

Here's a simple query with variable interpolation:

getBadge
  :: MonadIO m
  => BadgeId
  -> SqlPersistT m [Entity BadgeEvent]
getBadge badgeId =
  [sqlQQ|
    SELECT
@cdparks
cdparks / Typed.hs
Last active Mar 13, 2018
(De)serializing GADTs using an intermediate untyped representation
View Typed.hs
#!/usr/bin/env stack
-- stack --resolver lts-10.8 script
-- Serializing and deserializing GADTs by using an intermediate
-- untyped representation.
--
-- Typed | List [And (Not (Equals (Int 1) (Int 2))) (Equals (Bool True) (Bool False)),Bool False]
-- Annotated | List [And (Not (Equals (Int 1) (Int 2))) (Equals (Bool True) (Bool False)),Bool False] ::: ListTy BoolTy
-- Erased | UList [UAnd (UNot (UEquals (UInt 1) (UInt 2))) (UEquals (UBool True) (UBool False)),UBool False]
-- Encoded | "{\"List\":[{\"And\":[{\"Not\":{\"Equals\":[{\"Int\":1},{\"Int\":2}]}},{\"Equals\":[{\"Bool\":true},{\"Bool\":false}]}]},{\"Bool\":false}]}"
@cdparks
cdparks / Vector.hs
Last active Jan 26, 2018
Convert type-level lists to term-level sized-vectors
View Vector.hs
#!/usr/bin/env stack
-- stack --resolver lts-10.3 script --package ghc-typelits-natnormalise
{-
$ tail -2 Vector.hs
print $ toVector @[1, 2, 3, 4, 5]
print $ toVector @["whomp", "merp", "yarp"]
$ ./Vector.hs
@cdparks
cdparks / church.js
Created Jan 23, 2018
Church Encoded List in Flow
View church.js
/* @flow */
export type ChurchT<A> = <R>(cons: (a: A, r: R) => R, nil: () => R) => R
function fromArray<A>(array: Array<A>): ChurchT<A> {
return function<R>(cons: (a: A, r: R) => R, nil: () => R): R {
let result = nil()
for (let i = array.length - 1; i >= 0; --i) {
result = cons(array[i], result)
}
View UntypedArray.hs
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
import Control.Monad
import Control.Exception
import GHC.Exts
import GHC.IO
import GHC.Prim
View NotQuiteIdentity.hs
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Typeable
import Control.Monad
import Control.Exception
import Prelude hiding (id)
@cdparks
cdparks / Compact.cmm.diff
Created Aug 25, 2017
Trying to compact typeclass dictionaries being carried around by constructors
View Compact.cmm.diff
diff --git a/rts/Compact.cmm b/rts/Compact.cmm
index 72ad4dd437..a4b2d9b2ef 100644
--- a/rts/Compact.cmm
+++ b/rts/Compact.cmm
@@ -121,17 +121,49 @@ eval:
}
// We shouldn't see any functions, if this data structure was NFData.
+
+ case
View Main.hs
{-# LANGUAGE DeriveGeneric #-}
module Main where
import Control.DeepSeq
import Control.DeepSeq.Generics (genericRnf)
import GHC.Generics
data List a = Nil | Cons a (List a) deriving (Generic)
@cdparks
cdparks / gist:f18373921c7a59156cd7
Created Mar 21, 2015
Partially initialized record
View gist:f18373921c7a59156cd7
data Point2D = Point2D { x :: Double, y :: Double }
p = Point2D { x = 1 }
-- Point2D (D# 1.0) (recConError "x.hs:3:5-21|y"#)
main = do
print (x p)
print (y p) -- BOOM
@cdparks
cdparks / Stream.hs
Created Feb 25, 2015
Lazy infinite streams in Haskell, Swift, and Python
View Stream.hs
module Main where
import Prelude hiding (
iterate, repeat, map, filter, zipWith, zip,
take, takeWhile, drop, dropWhile)
import qualified Prelude as P
import Text.Printf (printf)
import Data.List (intercalate)
infixr 5 :>
You can’t perform that action at this time.