-- | Create a new label, used with 'goto' and 'label' to write line jump based programming.
--   Where possible you should use structured alternatives, such as 'iff', 'while' and 'loop'.
--   Each created label must be used with one call to 'label', and any number of calls to
--   'goto'. As an example:
--
-- @
-- abort <- 'newLabel'
-- 'while' var $ do
--     'iff_' cond1 $ 'goto' abort
--     'iff_' cond2 $ 'goto' abort
--     var '@=' 'strDrop' 1 var 
-- 'label' abort
-- @
--
--   Note that the above example could have been written in a simpler manner with 'loop'.
newLabel :: Action Label
newLabel = fmap Label unique
newLabel :: Action Label
newLabel = fmap Label unique
newLabel = fmap Label unique