Skip to content

Instantly share code, notes, and snippets.

@paulvictor
paulvictor / MultipleTypes.purs
Created September 12, 2018 18:22
Using Json for multiple types into an array
module MultipleTypes where
import Data.Argonaut.Decode.Combinators ((.?))
import Prelude
import Data.Argonaut.Core (Json, caseJson)
import Data.Argonaut.Core (stringify) as Json
import Data.Argonaut.Decode.Class (decodeJson)
import Data.Argonaut.Encode.Class (encodeJson)
import Data.Either (Either, either)
@paulvictor
paulvictor / Try2.purs
Last active April 12, 2019 13:48
Using a dictionary to decide a runtime implementation
module Try2 where
import Prelude
import Control.Monad.Rec.Class (forever)
import Data.Tuple (uncurry)
import Data.Tuple.Nested ((/\), type (/\))
import Effect (Effect)
import Effect.Aff (Aff, launchAff)
import Effect.Class (liftEffect)
@paulvictor
paulvictor / i3-config
Created August 23, 2018 07:01
i3 config
# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#
# i3 config file (v4)
#
# Please see http://i3wm.org/docs/userguide.html for a complete reference!
@paulvictor
paulvictor / Workflow.purs
Created August 7, 2018 11:37
A Workflow scheduler + runner
module Workflow where
import Prelude
import Control.Alt ((<|>))
import Control.Monad.Aff.Bus (BusR, BusW, make, read, split, write) as Bus
import Control.Monad.Rec.Class (forever)
import Data.Argonaut.Decode (class DecodeJson)
import Data.Argonaut.Encode.Class (class EncodeJson)
import Data.Newtype (wrap)
@paulvictor
paulvictor / TypeLevelFoo.purs
Last active July 30, 2018 12:25
Decode for a value which has a type level default
newtype WithDefault b a = WithDefault a
instance showWithDefault :: Show a => Show (WithDefault b a) where
show (WithDefault a) = show a
class Reflect a b | b -> a where
reflect :: Proxy a -> b
instance reflectSProxyString :: IsSymbol sym => Reflect (SProxy sym) String where
reflect = const (reflectSymbol (SProxy :: SProxy sym))
class RowSubset (row :: # Type) (xs :: RowList) (subrow :: # Type) | xs -> subrow where
subsetImpl :: RLProxy xs -> {|row} -> {|subrow}
instance nilRowSubset :: RowSubset row Nil () where subsetImpl _ _ = {}
instance consRowSubset
::
( IsSymbol sym
, Cons sym a subrowWithoutSym subrowWithSym
, Cons sym a srcWithoutSym src
@paulvictor
paulvictor / RecordMod.purs
Created March 6, 2018 06:26
FillInNestedRecords
module RecordMods where
import Prelude
import Control.Monad.Eff (Eff)
import Data.Foreign (Foreign)
import Data.Record (insert)
import Data.Symbol (SProxy(..))
newtype Person = Person {firstName :: String, lastName :: String, address :: Address}
@paulvictor
paulvictor / RandomBehavior.js
Created February 20, 2018 23:52
Random Integers as a behavior
exports.affToEvent = function(aff) {
return function(sub) {
aff(function(a) { sub(a); }, function(e){})
}
}
exports.randomIntBetween = function(min) {
return function(max) {
return function(e) {
return function(sub) {
0x0ea94785c4a59Db46e02129ddfaD9962F29011Eb
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFlvASQBCADeRkGri0A+UEOlER16ev8wDZ2+kHPxk4y63vjNCLf1AYE5Dcnl
YiBA6FHr4cf66ECg83PqtOZiCRw3T75jX3MYcwKOtWghrlIjsRZBNk6gSvm7DbbT
0RsVw9HPb/EhxsVQoiDb7SIeTNOoWjr20ixdUW4WRy+OCRNxuxzM65B8SrJKftEz
UKIxMo6JqRzEqDALsJB+8FmY1ZqsmWiI/5LSp131obm6dS653fawGpxHw4AKna5U
scsT7LmcFrv18ID1ca/e2XXnBGogtEg23I2Tv2svOtJld3Q69aBbW1bidi7q/+DS
fzlXsdKtlv3iHTRpxHOP+jlbJ1kSKcUbFl5HABEBAAG0PlBhdWwgVmljdG9yIFJh
aiAoUGF1bCBWaWN0b3IncyBHUEcga2V5KSA8cGF1bHZpY3RvckBnbWFpbC5jb20+
iQFOBBMBCAA4FiEEP8i/n4ahkxxtV8peRuauRp9+Y+oFAllvASQCGwMFCwkIBwIG