Skip to content

Instantly share code, notes, and snippets.

@myuon
myuon / HList.hs
Created February 18, 2014 10:47
(Show a) => HeteroList a, (Real a) => HeteroList a -- with ConstraintKinds Extension
{-# LANGUAGE GADTs, DataKinds, TypeFamilies, ConstraintKinds, TypeOperators, UndecidableInstances #-}
import GHC.Prim (Constraint)
import Data.Ratio ((%))
type family All (cx :: * -> Constraint) (xs :: [*]) :: Constraint
type instance All cx '[] = ()
type instance All cx (x ': xs) = (cx x, All cx xs)
data HList (as :: [*]) where
@myuon
myuon / lengthList.hs
Created February 18, 2014 12:15
長さを表す型付きリストで型安全なlength, zip, head, tail, append
{-# LANGUAGE DataKinds, GADTs, KindSignatures, FlexibleInstances, FlexibleContexts, TypeFamilies #-}
import Control.Applicative
data Nat = Zero | Succ Nat
type family Plus (n :: Nat) (m :: Nat) :: Nat
type instance Plus (Succ n) m = Succ (Plus n m)
type instance Plus Zero m = m
data LengthList n a where
Nil :: LengthList Zero a
@myuon
myuon / file0.hs
Created February 24, 2014 15:38
親と子の関係を表現するLookAtパターン ref: http://qiita.com/myuon_myon/items/1c1e1131f485d95f4fc6
{-# LANGUAGE GADTs, TemplateHaskell, FlexibleContexts #-}
import Control.Arrow
import Data.List
import Control.Monad.Operational.Mini
import Control.Monad.Operational.TH (makeSingletons)
import Control.Monad.State
data Pattern p q x where
GetLocal :: Pattern p q p
PutLocal :: p -> Pattern p q ()
{-# LANGUAGE TemplateHaskell, RankNTypes, GADTs, FlexibleContexts #-}
import Control.Lens
import Control.Monad.State
import Control.Monad.Operational.Mini
import Control.Monad.Operational.TH (makeSingletons)
import Data.Maybe (fromJust)
data Pattern p q x where
Hook :: Lens' q a -> State a () -> Pattern p q ()
Pick :: Lens' q a -> Pattern p q a
@myuon
myuon / LookAt.hs
Last active August 29, 2015 13:56
LookAtパターン・改改
{-# LANGUAGE TemplateHaskell, MultiParamTypeClasses, TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances, GADTs, FlexibleContexts #-}
import Control.Monad.State
import Control.Lens
import Control.Monad.Operational.TH (makeSingletons)
import Control.Monad.Operational.Mini
import Data.Functor.Product
data Pattern p q x where
Hook :: Either (State p ()) (State q ()) -> Pattern p q ()
@myuon
myuon / Yield.hs
Last active August 29, 2015 13:57
(Storeコモナドによる) LookAtパターンCoroutineバージョン
{-# LANGUAGE GADTs, TemplateHaskell, FlexibleContexts #-}
import Control.Lens
import Control.Arrow
import Data.Functor.Product
import Control.Monad.State
import Control.Monad.Operational.Mini
import Control.Comonad.Store
data Pattern p q x where
Hook :: Either (p -> p) (q -> q) -> Pattern p q ()
@myuon
myuon / hoge.md
Last active August 29, 2015 14:00
ネタ帳

ネタ帳

やりたいことや興味のあること、新規性のありそうなことをまとめておく。時期が来たら整理したり実行したり削除したりすればいいってワケ。

Chimera関連

  • 辞書のリンク構造の調査:単語の生成と定義文章をパターンから生成するのは異なる問題として捉えるべき?
  • スクリプト->魔法陣生成器
@myuon
myuon / Main.hs
Last active August 29, 2015 14:02
{-# LANGUAGE DeriveFunctor, FlexibleInstances, TemplateHaskell #-}
import Data.IORef
import TH
import PList
data Parent = Parent { _x :: Int, children :: [Address] } deriving Show
data Child = Child { _y :: Int, parent :: Address } deriving Show
makeManager [''Parent, ''Child]
@myuon
myuon / Main.hs
Last active August 29, 2015 14:04
Conway's Game of Life
import FreeGame
import qualified Data.IntMap as IM
import Control.Monad.State.Strict
import Control.Arrow
data Cells a = Cells (IM.IntMap a) (Int,Int)
instance Functor Cells where
fmap f (Cells m k) = Cells (fmap f m) k
type Board = Cells Bool
@myuon
myuon / _paiza
Last active August 29, 2015 14:04
paiza Online Hackathon
問題: https://paiza.jp/poh/kirishima
結果: http://paiza.jp/poh/kirishima/result/c7b9268a3c4b60e5c40aff903b3b9d96