Skip to content

Instantly share code, notes, and snippets.

@dcastro
dcastro / refined.scala
Last active February 19, 2019 10:58
Refinement Types in Scala
import eu.timepit.refined._
import eu.timepit.refined.api._
import eu.timepit.refined.auto._
import eu.timepit.refined.numeric._
import eu.timepit.refined.boolean._
import eu.timepit.refined.char._
import eu.timepit.refined.collection._
import eu.timepit.refined.generic._
import eu.timepit.refined.string._
@dcastro
dcastro / authchecks.scala
Last active September 26, 2019 14:33
AuthCheck[A]
import cats.implicits._
import org.joda.time.DateTime
import tv.spotx.ironbark.druid.{DimensionMetadata, MeasurementMetadata, Schema}
import tv.spotx.ironbark.syntaxtree.druid.DruidQuery
import tv.spotx.ironbark.validation.Err.{Errs, MaybeValid}
object Test extends App {
// case class AuthCheck[+A](authorize: UserEntities => Either[Errs, (A, UserEntities)])
@dcastro
dcastro / io.md
Last active May 27, 2022 17:27
IO vs Future and Referential transparency

The problem

These programs are safe to refactor:

object p1 {
  val x = 1 + 123
  val y = 1 + 123
}
@dcastro
dcastro / amm.scala
Last active March 3, 2020 11:52
ammonite log
Loading...
Welcome to the Ammonite Repl 1.3.2
(Scala 2.12.7 Java 1.8.0_212)
If you like Ammonite, please support our development at www.patreon.com/lihaoyi
@ import $ivy.`org.scala-lang.modules::scala-parser-combinators:1.1.2`
import $ivy.$
@ {
sealed trait Expr
case class Term(term: String) extends Expr
@dcastro
dcastro / approve.log
Last active September 25, 2020 12:42
Log - Stablecoin FA1.2
Calling approve
[Debug] [Morley.Client.TezosClient.Impl.getAlias#254] Getting an alias for tz1TfLF61NboKZYbU7hxX3C1jXw45im6d8Kt
[Debug] [Morley.Client.TezosClient.Impl.callTezosClient#447] Running: tezos-client -A carthage.testnet.tezos.serokell.team -P 8732 --mode mockup list known contracts
[Debug] [Morley.Client.TezosClient.Impl.callTezosClient#453] stdout:
nettest.Stablecoin.Stablecoin FA1.2: KT1GrQC4nGZckcfeCtLu2sKphsNsoxUoLNtK
nettest.Stablecoin.natConsumer: KT1GdZ9EoAY2o5jHN2x4rACwTDAwcCGZV7bn
helper: KT1DW3Fq5m7q1bn8QgjhSX9iEwcBAK82bva6
nettest.Stablecoin.chainIdContract: KT1KUhbZCatB5X6svDpXJ4gAX5a9X1LyU2yv
nettest.Stablecoin.permitCounterConsumer: KT1AihogGMjD3R8y5TK31Z6iJKXwCThK4i5D
nettest.Stablecoin.nettest.Stablecoin: KT1HBxv2cjKjY1nWALMbKKMdsymrdTf8hxtG
@dcastro
dcastro / approve.log
Created September 25, 2020 13:48
Log - Optimized Stablecoin FA1.2
Calling approve
[Debug] [Morley.Client.TezosClient.Impl.getAlias#254] Getting an alias for tz1TfLF61NboKZYbU7hxX3C1jXw45im6d8Kt
[Debug] [Morley.Client.TezosClient.Impl.callTezosClient#447] Running: tezos-client -A carthage.testnet.tezos.serokell.team -P 8732 --mode mockup list known contracts
[Debug] [Morley.Client.TezosClient.Impl.callTezosClient#453] stdout:
nettest.Stablecoin.Stablecoin FA1.2: KT1VuoysRj6tWFXAjrbQd67YMnTMi3SpNTdC
nettest.Stablecoin.natConsumer: KT1GnUjbtLqQgeupcDCReYmzTa86mkvwgoRa
nettest.Stablecoin.nettest.transferlist_internal: KT1QQAymdeefTj3RwTkvjvGWTDWJPenoiG7k
nettest.Stablecoin.nettest.Stablecoin: KT1Q4DccWWaM15nc9iaMDcwLNj3m85k8euVF
helper: KT1DW3Fq5m7q1bn8QgjhSX9iEwcBAK82bva6
nettest.Stablecoin.chainIdContract: KT1KUhbZCatB5X6svDpXJ4gAX5a9X1LyU2yv
@dcastro
dcastro / Problem.hs
Last active September 29, 2020 08:20
Capturing type variables in TemplateHaskell
import Language.Haskell.TH.Lib
import Language.Haskell.TH.Syntax
module Problem where
data PP a where
PP :: forall a. Typeable a => PP a
instance Lift (PP a) where
lift PP = [|PP|]
@dcastro
dcastro / universal_existential.md
Last active February 6, 2022 07:55
Universally vs existentially quantified type variables

A type variable can be either universally ("for all x, then ...") or existentially quantified ("there exists some x, ...").

(If you're a maths persons, this corresponds to ∀x. x and ∃x. x, respectively)

In haskell, universally quantified type vars are represented with a forall:

head :: forall a. [a] -> Maybe a
@dcastro
dcastro / rightComb.hs
Last active January 18, 2021 16:02
TyFam inductive case
import Data.Vinyl (Rec(..))
data Tag = TagInt | TagPair Tag Tag
data Exp (t :: Tag) where
EInt :: Int -> Exp 'TagInt
EPair :: Exp t1 -> Exp t2 -> Exp ('TagPair t1 t2)
type family RightComb (tags :: [Tag]) :: Tag where
RightComb '[ x, y ] = 'TagPair x y
@dcastro
dcastro / a.log
Created February 9, 2021 16:36
Doctest + mixins
/home/dc/.ghcup/bin/ghc --make -fbuilding-cabal-package -O -static -dynamic-too -dynosuf dyn_o -dynhisuf dyn_hi -outputdir /home/dc/dev/other/doctest-mixins/dist-newstyle/build/x86_64-linux/ghc-8.8.3/doctest-mixins-0.1.0.0/build -odir /home/dc/dev/other/doctest-mixins/dist-newstyle/build/x86_64-linux/ghc-8.8.3/doctest-mixins-0.1.0.0/build -hidir /home/dc/dev/other/doctest-mixins/dist-newstyle/build/x86_64-linux/ghc-8.8.3/doctest-mixins-0.1.0.0/build -stubdir /home/dc/dev/other/doctest-mixins/dist-newstyle/build/x86_64-linux/ghc-8.8.3/doctest-mixins-0.1.0.0/build -i -i/home/dc/dev/other/doctest-mixins/dist-newstyle/build/x86_64-linux/ghc-8.8.3/doctest-mixins-0.1.0.0/build -isrc -i/home/dc/dev/other/doctest-mixins/dist-newstyle/build/x86_64-linux/ghc-8.8.3/doctest-mixins-0.1.0.0/build/autogen -i/home/dc/dev/other/doctest-mixins/dist-newstyle/build/x86_64-linux/ghc-8.8.3/doctest-mixins-0.1.0.0/build/global-autogen -I/home/dc/dev/other/doctest-mixins/dist-newstyle/build/x86_64-linux/ghc-8.8.3/doctest-mixins-0.1.0