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) |