Skip to content

Instantly share code, notes, and snippets.

@5outh
5outh / plugin.hs
Last active November 25, 2016 18:23
mapVar and plugIn functions
mapVar :: (Char -> Expr a) => Expr a -> Expr a
mapVar f (Var d) = f d
mapVar _ (Const a) = Const a
mapVar f (a :+: b) = (mapVar f a) :+: (mapVar f b)
mapVar f (a :*: b) = (mapVar f a) :*: (mapVar f b)
mapVar f (a :^: b) = (mapVar f a) :^: (mapVar f b)
mapVar f (a :/: b) = (mapVar f a) :/: (mapVar f b)
plugIn :: Char -> a -> Expr a -> Expr a
plugIn c val = mapVar (\x -> if x == c then Const val else Var x)
@5outh
5outh / natstyle.hs
Created October 17, 2016 16:21
Style proposal
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeOperators #-}
module Main where
import Control.Monad.Morph
import Control.Monad.Reader hiding (reader)
import Control.Monad.State hiding (state)
import Control.Monad.Except
import Control.Monad.IO.Class
data Rational : Nat -> Nat -> Type where
MkRational : (a : Nat) -> (b : Nat) -> Rational a b
MultRat : Rational a b -> Rational c d -> Rational (a*c) (b*d)
DivRat : Rational a b -> Rational c d -> Rational (a*d) (b*c)
AddRat : Rational a b -> Rational c d -> Rational (a*d + b*c) (b*d)
Simplify : Rational a b -> Rational (divNat a (gcd a b)) (divNat b (gcd a b))
||| λΠ> :t Simplify (DivRat (MkRational 770 30) (MkRational 3 4))
||| Simplify (DivRat (MkRational 770 30) (MkRational 3 4)) : Rational 308 9
map ($ 1000) [(+10), (*800), (/300)]
-- [1010.0,800000.0,3.3333333333333335]
foldr ($) 8 [(+5), (*2)]
-- 21
-- (8 * 2 + 5)
@5outh
5outh / events.hs
Created May 3, 2016 22:14
Event System in Haskell
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad.State
import Data.Text
import Data.Monoid
import qualified Data.Map as M
import Control.Monad
-- For example
type JSON = Text
-- An instance of RenderResponse knows how to turn itself into JSON
class RenderResponse a where
render :: a -> JSON
data Error = Error Text
data RegularResponse = RegularResponse Text -- For example
data ErrorResponse a = ErrorResponse a [Error] -- Parameterize over Response type
# Note: This is after the lines restricting php 7 have been commented out in `configure`. My PHP Version output:
$ php --version
PHP 7.0.5 (cli) (built: Mar 31 2016 06:38:23) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
$ export LIBFFI_PATH=$(brew --prefix libffi)
$ LDFLAGS=" -L${LIBFFI_PATH}/lib" PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${LIBFFI_PATH}/lib/pkgconfig" ./configure
./configure: line 624: test: /Applications/Sublime: binary operator expected
main = mapM_ printNotExpr . lines =<< readFile "inputs.txt"
where printNotExpr e = case parseExpr e of
Right x -> print $ not x
Left e -> error $ show e
@5outh
5outh / BoolExpr.hs
Last active December 28, 2015 06:19
data Expr = Not Expr
| And Expr Expr
| Or Expr Expr
| SubExpr Expr
| Var Char
deriving Eq
instance Show Expr where
show (Not e) = "NOT " ++ show e
show (And e1 e2) = show e1 ++ " AND " ++ show e2
show (Or e1 e2) = show e1 ++ " OR " ++ show e2
show (Var c) = [c]
show (SubExpr e) = "(" ++ show e ++ ")"