úÎC@³#      !" Safe-InferedInternally, a Wizard& is essentially a prompt monad with a :. A constructor exists for each primitive action, as well  as a special " escape hatch" constructor (>) used for writing backend-specific primitives and modifiers. M Each back-end has a corresponding data type, used as a type parameter for Wizard3. This data type is usually opaque, but internally M specifies additional primitive actions that are specific to the back-end.  4 is parameterised by this data type (for use in the : constructor), the prompt monad itself (so that modifiers I can be made as well as primitives) and the return type of the action.    Trustworthy A Wizard aA is a conversation with the user that will result in a data type a, or may fail.  A   is made up of one or more " primitives"! (see below), composed using the #,  $ and % instances. The %; instance is, as you might expect, a maybe-style cascade. 5 If the first wizard fails, the next one is tried. The  d constructor is exported here for use when developing backends, but it is better for end-users to  simply pretend that   is an opaque data type. Don'2t depend on this unless you have no other choice.  [s are, internally, just a maybe transformer over a prompt monad for each primitive action. &Read one line of input from the user. JRead one line of input, with some default text already present, before and/or after the editing cursor. i Backends are not required to display this default text, or position the cursor anywhere, it is merely  a suggestion. BRead one line of password input, with an optional mask character. f The exact masking behavior of the password may vary from backend to backend. The masking character ! does not have to be honoured. )Read a single character only from input. 6Output a string, if the backend used supports output. QOutput a string followed by a newline, if the backend used supports such output. SRetry produces a wizard that will retry the entire conversation again if it fails. & Conceptually, it could thought of as  retry x = x <|> retry x, however it also prints 8 a user-friendly error message in the event of failure. Same as -, except the error message can be specified. x ` defaultTo` y will return y if x fails, e.g parseRead line ` defaultTo` 0. Like &&, except the function may be partial (' causes the wizard to fail).  validator p wL causes a wizard to fail if the output value does not satisfy the predicate p. Simply validator (not . null)2, makes a wizard fail if it gets an empty string. OMakes a wizard fail if it gets an ordered quantity outside of the given range. Simply  parser readP. Attaches a simple read parser to a  . +Translate a maybe value into wizard success/ failure. 8Ensures that a maybe value satisfies a given predicate. A read-based parser for the  modifier.  Text to the left of the cursor  Text to the right of the cursor Mask character, if any. (     ( Safe-InferedGThe Haskeline back-end will throw this exception if EOF is encountered ? when it is not expected. Specifically, when actions such as ) return '. A Haskeline backend for wizards>, supporting input, output, default text, and password input. ` In addition, Haskeline settings can be modified for a single wizard, and arbitrary IO can be  performed using the * instance. /Runs a Wizard action in the Haskeline backend. ?Modifies a wizard so that it will run with different Haskeline + to the top level input monad.  ,-   ,- Safe-Infered!&A very simple standard IO backend for wizards, supporting input and output. 0 Default text and password masks are ignored. 8 A more full-featured back-end is based on Haskeline. : Arbitrary IO actions can be performed in wizards via a * instance. "-Runs a Wizard action in the BasicIO backend. !".!"!"!"./       !"#$%&'(&)*&'+&),&-./012345067898: wizards-0.1System.Console.Wizard.InternalSystem.Console.WizardSystem.Console.Wizard.HaskelineSystem.Console.Wizard.BasicIO WizardActionBackendOutputLnOutput CharacterPassword LinePresetLine PromptStringWizardlinelinePrewrittenpassword characteroutputoutputLnretryretryMsg defaultToparser validatornonEmptyinRange parseRead liftMaybeensurereadP UnexpectedEOF Haskeline runHaskeline withSettingsBasicIO runBasicIObaseControl.Applicative ApplicativeGHC.BaseMonad Alternativefmap Data.MaybeNothing$fMonadPromptWizardActionWizardhaskeline-0.6.4.7System.Console.Haskeline getInputLinetransformers-0.2.2.0Control.Monad.IO.ClassMonadIOSystem.Console.Haskeline.InputTSettings$fMonadIOWizard$fExceptionUnexpectedEOF