Lens CheatSheet
-- Accessors
_Show :: (Read a, Show a) => Prism' String a
only :: Eq a => a -> Prism' a ()
{-# 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 |
{-# 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 () |
{-# 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 () |
-- Accessors
_Show :: (Read a, Show a) => Prism' String a
only :: Eq a => a -> Prism' a ()
{-# 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] |
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 |
問題: https://paiza.jp/poh/kirishima | |
結果: http://paiza.jp/poh/kirishima/result/c7b9268a3c4b60e5c40aff903b3b9d96 |
{-# LANGUAGE DataKinds, TypeOperators, KindSignatures, TypeFamilies #-} | |
{-# LANGUAGE UndecidableInstances, FlexibleInstances, FlexibleContexts #-} | |
{-# LANGUAGE ScopedTypeVariables, GADTs, MultiParamTypeClasses, FunctionalDependencies #-} | |
import GHC.TypeLits | |
import Data.Type.Equality | |
import Data.Proxy | |
type family (a :: Nat) % (b :: Nat) :: Nat where | |
a % b = Mod a b (CmpNat a b) |
{-# LANGUAGE GADTs, FlexibleContexts, TemplateHaskell #-} | |
import Control.Comonad.Env | |
import Control.Comonad | |
import Control.Monad.Operational.Mini | |
import qualified Data.IntMap as M | |
data Field = Field String (M.IntMap Chara) deriving (Show) | |
data Chara = Chara String deriving (Show) | |
updateField f (Field s m) = Field (f s) m | |
updateChara f (Chara s) = Chara (f s) |