workflow-osx: a "Desktop Workflow" monad with Objective-C bindings

[ accessibility, apple, automation, bindings, desktop, ffi-, gpl, library, program ] [ Propose Tags ]

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

includes bindings to:

  • press keys with modifiers

  • get/set the clipboard

  • launch/focus applications

  • get the name of the current application

  • open URLs

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]


[Last Documentation]

  • Workflow
    • Workflow.OSX
      • Workflow.OSX.Bindings
        • Workflow.OSX.Bindings.Raw
      • Workflow.OSX.Constants
      • Workflow.OSX.DSL
      • Workflow.OSX.Example
      • Workflow.OSX.Execute
      • Workflow.OSX.Extra
      • Workflow.OSX.Marshall
      • Workflow.OSX.Types


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS] 0.0.0, 0.0.1
Dependencies base (>=4.8 && <4.9), bv (>=0.3 && <0.4), bytestring (>=0.10 && <0.11), exceptions (>=0.8 && <0.9), filepath (>=1.4 && <1.5), free (>=4.12 && <4.13), http-types (>=0.8 && <0.9), mtl (>=2.2 && <2.3), transformers (>=0.4.2 && <0.4.3), workflow-osx (==0.0.1) [details]
License GPL-3.0-only
Copyright Copyright (C) 2015 Spiros M. Boosalis
Author Spiros Boosalis
Category Accessibility, Apple, Automation, Bindings, Desktop, FFI
Home page
Bug tracker
Source repo head: git clone
Uploaded by sboo at 2015-10-11T02:47:38Z
Executables example
Downloads 1465 total (6 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2016-12-01 [all 4 reports]

Readme for workflow-osx-0.0.1

[back to package description]


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:

  • OS

      $ sw_vers
      ProductName:	Mac OS X
      ProductVersion:	10.9.5
      BuildVersion:	13F34
  • C compiler

      $ gcc --version
      Configured with: --prefix=/Applications/ --with-gxx-include-dir=/usr/include/c++/4.2.1
      Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
      Target: x86_64-apple-darwin13.4.0
      Thread model: posix
  • Haskell compiler

      $ ghc --version 
      The Glorious Glasgow Haskell Compilation System, version 7.10.1


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