Skip to content

Instantly share code, notes, and snippets.

Avatar

Chris Parks cdparks

View GitHub Profile
@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
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)
View Shaden.hs
import Data.Char (ord)
main = print $ rot13 "unccl oveguqnl, funqra!"
where
rot13 = foldr replace []
alpha = ['a'..'z']
index x = (ord x - ord 'a' + 13) `mod` 26
replace x xs
| x `elem` alpha = alpha !! index x:xs
| otherwise = x:xs
@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 NotQuiteIdentity.hs
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Typeable
import Control.Monad
import Control.Exception
import Prelude hiding (id)
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
@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)
}
@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 / 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 :>
@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}]}"
You can’t perform that action at this time.