The workflow-osx package

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.



a "Desktop Workflow" monad with Objective-C bindings.

includes bindings to:

for example:

 -- | cut the currently highlighted region
 cut :: (MonadWorkflow m) => m String
 cut = do
  sendKeyChord [CommandModifier] XKey
  delay 250
 -- | transform the currently highlighted region, via the clipboard
 transformClipboard :: (MonadWorkflow m) => (String -> String) -> m ()
 transformClipboard f = do
  contents <- cut
  setClipboard (f contents)
  sendKeyChord [CommandModifier] VKey

see Workflow.OSX for several more examples

(if hackage won't build the docs, see them at

(this package is on hackage for convenience, but it's still a prerelease)

[Skip to ReadMe]


Versions0.0.0, 0.0.1, 0.0.1
Change logNone available
Dependenciesbase (==4.8.*), bv (==0.3.*), bytestring (==0.10.*), exceptions (==0.8.*), filepath (==1.4.*), free (==4.12.*), http-types (==0.8.*), mtl (==2.2.*), transformers (==0.4.2.*), workflow-osx (==0.0.1) [details]
CopyrightCopyright (C) 2015 Spiros M. Boosalis
AuthorSpiros Boosalis
CategoryAccessibility, Apple, Automation, Bindings, Desktop, FFI
Home page
Bug tracker
Source repositoryhead: git clone
UploadedSun Oct 11 02:46:39 UTC 2015 by sboo



Maintainers' corner

For package maintainers and hackage trustees

Readme for workflow-osx-0.0.1


a (free) monad, with Objective-C bindings, for "Workflow" actions.

for detailed examples, see the documentation on hackage or github (<


the build

foreign dependencies always complicate the build process. it's known to work with the following:


platform agnosticism

exploit the free monad's flexibility to define platform-agnostic workflows

problem: windows (Linux/Windows) versus processes (OS X)

problem: keyboards. Apple keyboards don't have the Windows key, Windows keyboards don't have the Apple key. some keyboards have a dozen random extra unbound keys.

automatic delay insertion

problem: currently, delays must be inserted manually. keyboard shortcuts in Emacs succeed with no delay. keyboard shortcuts in Chrome, like closing a tab with M-w, may drop without a long delay (like 250ms). furthermore, different actions need different delays between them (e.g. inserting text into Chrome can be done without delay).

parameterize Workflow on a keyboard type