úÎŽf†~}      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|Types about ActionDescription Toshio Ito <debug.ito@gmail.com>Safe Î Class for something describable.)Human-readable description of an action. 6 is used to describe the current binding to the user.Functions to build Binding Toshio Ito <debug.ito@gmail.com>NoneKQVSÁ,A monad to construct . i is the input symbol, and v is supposed to be the  bound to i.6WildBind back-end binding between inputs and actions. s# is the front-end state type, and i is the input type.CWildBind back-end binding with both explicit and implicit states. bs! is the explicit back-end state, fs is the front-end state, and i is the input type. You can make the explicit state bs implicit by ) function.}StateReaderIO MonadAction done by WildBind )Human-readable description of the action. The actual job. Make an 9 that runs the given monadic action before the original . Make an 8 that runs the given monadic action after the original . Same as  , but it returns ~.Same as  , but it returns ~.A $ with no bindings. It's the same as  , except  requires no context.Get the  bound to the specified state s and input i.Get the ' bound to the specified back-end state bs, front-end state fs and input i!Get the list of all bound inputs iD and their corresponding actions for the specified front-end state s.!Get the list of all bound inputs iC and their corresponding actions for the specified back-end state bs and front-end state fs.!Get the list of all bound inputs i$ for the specified front-end state s.!Get the list of all bound inputs i$ for the specified front-end state fs and the back-end state bs.Build a u with no explicit or implicit state. The bound actions are activated regardless of the back-end or front-end state.JIf different actions are bound to the same input, the latter action wins.Result of action (r) is discarded.Like K, but this function allows actions to use the current front-end state via €.Build a  with an explicit state (but no implicit state). The bound actions are activated regardless of the back-end or front-end state.Like K, but this function allows actions to use the current front-end state via €. Create a  that binds the action v to the input i.Transform the given action m a into an L and apply the continuation to it. It discards the result of action (type a). Usually used as an operator.-Transform the given continuation so that the  is set to the : passed to the continuation. Usually used as an operator.#Transform the actions in the given .Non-monadic version of .Non-monadic version of . JCreate a binding that behaves differently for different front-end states fs.!ICreate a binding that behaves differently for different back-end states bs."XCreate a binding that behaves differently for different front-end and back-end states, fs and bs.#*Add a condition on the front-end state to .$)Add a condition on the back-end state to .%9Add a condition on the back-end and front-end states to .&Contramap the front-end state.'Map the front-end input.(IConvert the back-end state. Intuitively, it converts a small state type bs into a bigger state type bs', which includes bs.For example, if you have a  l , you can do convBack (set l) (view l) b)Convert  to  by hiding the explicit state bs.*Extend  to . In the result >, the explicit back-end state is just ignored and unmodified.+Non-monadic version of .,Non-monadic version of .-%Revise (modify) actions in the given ..Like -7, but this function allows revising the back-end state.1 returns a  where no binding is defined.  combines two Es while preserving their individual implicit states. The right-hand = has precedence over the left-hand one. That is, if the two ~s both have a binding to the same key in the same front-end and back-end state, the binding from the right-hand one is used. the monadic action prepended the original . the monadic action appended. the original .  The predicateEnabled if the predicate is ‚Enabled if the predicate is ƒ! The predicateEnabled if the predicate is ‚Enabled if the predicate is ƒ" The predicateEnabled if the predicate is ‚Enabled if the predicate is ƒ#The predicate.Enabled if the predicate is ‚$The predicate.Enabled if the predicate is ‚%The predicate.Enabled if the predicate is ‚.( A setter. It's supposed to set bs into the original bs' and return the result.#A getter. It's supposed to extract bs from bs'.) Initial stateBinding' with explicit state#Binding containing the state inside-/A function to revise the action. If it returns „, the action is unbound.original bindingrevised binding+  !"#$%&'()*+,-.+ +, !"#$%)*&'(-. …†‡ˆ 22-Data types and type classes about front-ends. Toshio Ito <debug.ito@gmail.com>Safe^5Interface to the front-end. s! is the state of the front-end, i is the input.7Default  for inputs8FAction to grab (or capture) the specified input symbol on the device. 90Action to release the grab for the input symbol.:IAction to retrieve the next event. It should block if no event is queued.;Event from the front-end. s is the state of the front-end. i is the input.<"An event that a new input is made.=-An event that the front-end state is changed. 5689:7;=< ;<=56789:56789:;<='Functions to create executable actions. Toshio Ito <debug.ito@gmail.com>Noneh:‰!A monad keeping WildBind context.ŠOInternal state. fst is the current Binding, snd is the current front-end state.AWildBind configuration options.!You can get the default value of A by FF funcion, and modify its members via accessor functions listed below.BMAn action executed when current binding may be changed. Default: do nothing.COthe handler for exceptions thrown from bound actions. Default: just print the ‹ to Œ and ignore it.D Combines the 5 and the  and returns the executable.EBuild the executable with A.ACBDEFDEABCFBCABCTypes about number pads Toshio Ito <debug.ito@gmail.com>SafekG*Number pad key input with NumLock enabled.X+Number pad key input with NumLock disabled."GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh"XYZ[\]^_`abcdefghGHIJKLMNOPQRSTUVWGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh WildBind main module Toshio Ito <debug.ito@gmail.com>Nonem«_  !"#$%&'()*+,-.5689:7;=<ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh-Support for binding sequence of input events. Toshio Ito <debug.ito@gmail.com>NoneQV†7 u Intermediate type of building a  for key sequences.vPrepend prefix keys to the u.u- is composable in terms of prefixes, that is, P(withPrefix [key1, key2] seq_b) == (withPrefix [key1] $ withPrefix [key2] seq_b)w Create a u from  . The result u has no prefixes yet.xResolve u to build a  for key sequences.ŽA u: that binds the given key for canceling the key sequence.yAdd cancel keys to the u.zPrepend prefix keys to a . In the result , the original M is enabled only after you input the prefix input symbols in the same order.xDuring typing prefix keys, you can cancel and reset the key sequence by typing the "cancel keys". This is analogous to C-gw in Emacs. The binding of cancel keys are weak, that is, they are overridden by the original binding and prefix keys.pNote that this function creates an independent implicit state to memorize prefix keys input so far. This means, E(prefix [] [key1, key2] b) /= (prefix [] [key1] $ prefix [] [key2] b)GIf you want a more composable way of building a sequence binding, try u.{Revise actions in u. See -.|Follows the same rule as .v prefix keysŽ cancel keyy cancel keyszGThe cancel keys (input symbols for canceling the current key sequence.)list of prefix input symbolsthe original binding.the result binding.{Revising function. [i]! is the prefix keys input so far.uvwxyz{zuwxvy{u     !"#$%&'()*+,-./0123456789:;<=>>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ†‡‰Š‹Œ†‡ŽŽ‘†‡’“”•–†—˜†™šI›}œ(wild-bind-0.1.1.1-EffX5ixrO4ELM3gcCbmJRNWildBind.DescriptionWildBind.BindingWildBind.FrontEnd WildBind.ExecWildBind.Input.NumPad WildBind.Seq Control.LensLens'WildBind DescribabledescribeActionDescription$fDescribableEitherBinderBindingBinding'ActionactDescriptionactDobeforeafter justBefore justAfter noBinding boundAction boundAction' boundActions boundActions' boundInputs boundInputs'bindsbindsFbinds'bindsF'onrunasadvicebindingbindingFifFrontifBackifBoth whenFrontwhenBackwhenBoth convFront convInputconvBack startFromextendbinding' bindingF'reviserevise'$fFunctorAction $fShowAction$fMonoidBinding' $fMonadBinder$fApplicativeBinder$fFunctorBinderFrontEndfrontDefaultDescription frontSetGrabfrontUnsetGrabfrontNextEvent FrontEventFEInputFEChange$fShowFrontEvent$fEqFrontEvent$fOrdFrontEventOptionoptBindingHookoptCatchwildBind wildBind' defOption NumPadLockedNumL0NumL1NumL2NumL3NumL4NumL5NumL6NumL7NumL8NumL9 NumLDivide NumLMulti NumLMinusNumLPlus NumLEnter NumLPeriodNumPadUnlocked NumInsertNumEndNumDown NumPageDownNumLeft NumCenterNumRightNumHomeNumUp NumPageUp NumDivideNumMultiNumMinusNumPlusNumEnter NumDelete$fDescribableNumPadUnlocked$fDescribableNumPadLocked$fEqNumPadUnlocked$fOrdNumPadUnlocked$fShowNumPadUnlocked$fBoundedNumPadUnlocked$fEnumNumPadUnlocked$fEqNumPadLocked$fOrdNumPadLocked$fShowNumPadLocked$fBoundedNumPadLocked$fEnumNumPadLocked SeqBinding withPrefixtoSeqfromSeq withCancelprefix reviseSeq$fMonoidSeqBindingSRIMbaseGHC.BaseJustmemptytransformers-0.5.2.0Control.Monad.Trans.ReaderReaderTmappendghc-prim GHC.TypesTrueFalseNothingunBinder unBinding' WBContextWBState GHC.Exception SomeExceptionGHC.IO.Handle.FDstderrcancelOn