Skip to content

Instantly share code, notes, and snippets.

View danidiaz's full-sized avatar

Daniel Díaz Carrete danidiaz

View GitHub Profile
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveFoldable #-}
-- uses packages: comonad-transformers,streams,MonadRandom
import Prelude hiding (iterate,tail,repeat,sequence,take,zip,unzip)
import Data.Stream.Infinite (Stream ((:>)),iterate,tail,repeat,take,zip,unzip,unfold)
import Data.Foldable
import Data.Traversable (Traversable(..), sequence)
import Control.Applicative
@danidiaz
danidiaz / gist:4967054
Created February 16, 2013 14:03
EnvT use case
import Data.Tree
import Control.Comonad
import Control.Comonad.Trans.Class
import Control.Comonad.Trans.Env
replusify:: MonadPlus m => [a] -> m a
replusify = msum . map return
class Treeish l where
children :: MonadPlus m => l -> m l
@danidiaz
danidiaz / gist:5280121
Created March 31, 2013 09:34
Unstandard way of zipping conduits.
import Data.Functor.Identity
import Control.Applicative
import Control.Monad
import Control.Monad.Trans
import Control.Monad.Trans.Maybe
-- From the monad-loops package
import Control.Monad.Loops
import Data.Void
import Data.Conduit
import Data.Conduit.List
@danidiaz
danidiaz / gist:5280168
Created March 31, 2013 09:55
Nested list comprehensions.
pairs l = [ [(i,j) | j <- l] | i <- l]
pairs' l = do
i <- l
return $ do
j <- l
return (i,j)
@danidiaz
danidiaz / gist:5280201
Created March 31, 2013 10:19
Ruby RDoc
# This is a class.
#
# http://rdoc.rubyforge.org/RDoc/Markup.html
class Foo
# This is a method
#
# = This is a header
#
# This is below the header
#
@danidiaz
danidiaz / gist:5280738
Created March 31, 2013 14:24
Playing with Kind signatures.
{-# LANGUAGE KindSignatures #-}
import Control.Monad
import Control.Monad.Trans
import Control.Monad.Trans.Maybe
import Control.Applicative
import Data.Functor.Compose
--newtype Constant a (b:: * -> *) = Constant { getConstant :: a }
newtype Constant a (b:: * -> *) = Constant { getConstant :: a }
@danidiaz
danidiaz / gist:5282281
Created March 31, 2013 22:35
Fiddling with type synonyms
{-# LANGUAGE KindSignatures #-}
-- http://stackoverflow.com/questions/12717301/haskell-type-synonym-declaration-with-constraint-possible
{-# LANGUAGE Rank2Types #-} -- Necessary for the type synonyms to work!!!!
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
import Data.Functor.Compose
import Data.Monoid
--import Control.Category
@danidiaz
danidiaz / gist:5379155
Created April 13, 2013 16:48
Scala type erasure gotcha.
// from here http://stackoverflow.com/questions/1094173/how-do-i-get-around-type-erasure-on-scala-or-why-cant-i-get-the-type-paramete
List(1,2,3) match {
case l : List[String] => println("A list of strings?!")
case _ => println("Ok")
}
// <console>:9: warning: fruitless type test: a value of type List[Int] cannot also be a List[String] (but still might match its erasure)
// case l : List[String] => println("A list of strings?!")
@danidiaz
danidiaz / gist:5510085
Created May 3, 2013 15:43
Explictily invoking Java Threads on Clojure.
(dotimes [i 10] (.start (new Thread (fn [] (println i)))))
(dotimes [i 10] (.start (Thread. (fn [] (println i)))))
@danidiaz
danidiaz / gist:5578909
Created May 14, 2013 19:47
Dividing a postgresql database dump.
currfile = nil
File.open("postgresql.dmp", "r") do |file_handle|
file_handle.each_line do |line|
if line =~ /^COPY (\S+) /
currfile.close unless currfile.nil?
currfile = File.open("./postgresql_parts/#{$1}.dmp","w")
end
currfile.puts(line) unless currfile.nil?
end
end