Skip to content

Instantly share code, notes, and snippets.

@klapaucius
klapaucius / bf.c
Last active December 11, 2015 08:28 — forked from rblaze/bf.c
win 7 x64 cpu: i7 3770 ghc: 7.4.2 x32 -O2 -fllvm llvm: 3.1 gcc: 4.5.2 -O3 (нет разницы с -O2) разница в 2.6 раза, из 90 секунд работы хаскель-версии 12% - чтение файла и построение графа в памяти.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int infinity = 2147483647;
struct edge_t {
int v1;
int v2;
int cost;
$wbfStep :: EdgeVec -> CostVec -> Vector Dist
$wbfStep =
\ (w :: EdgeVec) (w1 :: CostVec) ->
let { Vector ipv ipv1 ipv2 ~ _ <- w1 `cast` ... } in
let { V_3 ipv3 ipv4 ipv5 ipv6 ~ _ <- w `cast` ... } in
let { Vector rb _ rb2 ~ _ <- ipv4 `cast` ... } in
let { Vector rb3 _ rb5 ~ _ <- ipv5 `cast` ... } in
let { Vector rb6 _ rb8 ~ _ <- ipv6 `cast` ... } in
runSTRep
(\ (@ s) (s :: State# s) ->
{-# LANGUAGE TypeFamilies, DataKinds, GADTs, NoMonomorphismRestriction #-}
-- http://typesandkinds.wordpress.com/2012/11/26/variable-arity-zipwith/
module Main where
import Prelude hiding (map, zipWith, zipWith3)
import Control.Applicative hiding (liftA, liftA2, liftA3)
import Control.Monad hiding (liftM, liftM2, liftM3)
@klapaucius
klapaucius / gist:6193028
Last active December 20, 2015 20:49
Fixed+TypeNats
Prelude> :set -XDataKinds
Prelude> :set -XKindSignatures
Prelude> :set -XScopedTypeVariables
Prelude> import Data.Fixed
Prelude Data.Fixed> import GHC.TypeLits
Prelude Data.Fixed GHC.TypeLits>
data E (a :: Nat)
Prelude Data.Fixed GHC.TypeLits>
instance SingI a => HasResolution (E a) where resolution _ = 10 ^ fromSing (sing :: Sing a)
@klapaucius
klapaucius / japp.hs
Last active December 26, 2015 12:29
J Applicative
{-# LANGUAGE FlexibleInstances #-}
import Control.Applicative
newtype J a = J { runJ :: a }
instance (Applicative f, Num n) => Num (J(f n)) where
(+) = (J .) . liftA2 (+) `on` runJ
(-) = (J .) . liftA2 (-) `on` runJ
(*) = (J .) . liftA2 (*) `on` runJ
abs = J . fmap abs . runJ
module Parsers =
let inline konst a b = a //const зарезервировано
type Parser<'s, 't> = 's -> ('t * 's) option
let inline uncons l = match l with x::xs -> Some(x,xs) | [] -> None
let inline unit a xs = Some (a, xs)
let inline (<*>) pf px inp =
match pf inp with
> import GHC.HeapView
>
let evLength n l = do
ht <- buildHeapTree n (asBox $ l)
let cnt (HeapTree _ (ConsClosure {ptrArgs = [hd,tl]})) = 1 + cnt tl
cnt _ = 0
return $ cnt ht
> let l = [1..]
> l !! 10
11
Prelude> let foo ys | (xs:_) <- reverse ys = case xs of xs' | (x:_) <- reverse xs' -> x
Prelude> foo [[1..3],[4..7],[8..10]]
10
Prelude> let foo' (reverse -> (reverse -> x:_):_) = x
Prelude> foo' [[1..3],[4..7],[8..10]]
10
@klapaucius
klapaucius / modles.md
Last active August 22, 2018 15:37
Детская болезнь "эмелизны" в хаскелизме.

Детская болезнь "эмелизны" в хаскелизме.

Приближается, пожалуй, самое значительное нововведение в хаскеле, со времен FC и превращения хаскеля из ML++ в недоΩmega: модули. Весь этот тектонический сдвиг, правда, остается незамеченным. Даже в Release notes об этом не упомянуто. Есть, только упоминание в руководстве пользователя Также, описания новой системы модулей можно найти на странице Backpack, но установить что из этого уже имплементировано можно только опытным путем.

Представление о ML-модулях можно составить из диссертации Дрейера (pdf)

{-# LANGUAGE RankNTypes, TypeInType, TypeApplications, OverloadedLabels,
ScopedTypeVariables, TypeOperators, GADTs, FlexibleInstances, FlexibleContexts,
TypeFamilies, UndecidableInstances #-}
import Data.Kind (Type)
import Data.Proxy (Proxy(..))
import GHC.Generics
import GHC.TypeLits (Symbol, KnownSymbol, symbolVal)
import Control.Lens
import Data.Generics.Product.Fields (field')