This is a bug fix release.
The most substantial improvements in this version are in project management. Projects can now have multiple executable targets and, in addition, a library target. On project creation a new dialog provides a choice of starting with a library or an executable target.
In addition, new projects can be created by importing an existing Cabal package. This feature comes with the caveat that not all functionality of a given Cabal package may be supported by Haskell for Mac yet. Nevertheless, it simplifies working with existing packages and also collaboration in a team, where not all team members use Haskell for Mac, as the imported package can now be maintained in version control without the .hsproj package wrapper around it.
Warning: To enable the above functionality, the Haskell for Mac project format changed slightly. Old versions of Haskell for Mac will not be able to open projects created with Version 1.6.0.
On the other side of the spectrum, quick experiments can now be performed in draft projects that don’t need to be saved to a permanent location. (They will still, of course, be autosaved and persist across relaunching the app until you explicitly discard them. Moreover, you can always explicitly save them if you decide to keep them after all.)
In addition to these main changes, we bring you a few additional improvements:
Last but not least, some more bugs got squashed:
Are you enjoying Haskell for Mac? If you do and you have got a moment to spare, we would very much appreciate an App Store rating or even review. They help a lot!
If you have got any suggestions for improvement, please contact us via the “Send Feedback” menu item in the “Help” menu. Thank you!
We have been diligently hunting down some bugs:
This release brings the eagerly awaited upgrade to GHC 8 (specifically, GHC 8.0.2). With it, Haskell for Mac acquires an entire range of new Haskell language extensions with the following four highlights:
(1) TypeInType (kinds support the full range of type features, including explicit quantification over kind variables, higher-rank kinds, and the use of type synonyms and families in kinds),
(2) injective type families (type families can be annotated with injectivity information),
(3) applicative do notation (alternative translation of the do notation using Applicative, instead of Monad operations, where possible), and
(4) duplicate record fields (support for record types with identically-named fields).
Moreover, ⌘I (and three finger tap, if enabled) now displays local type information in the module editor. Hence, the type for any proper subexpression in a function definition can now be shown, including the types of local variable and function definitions. In the presence of type errors, partial type information is provided. This significantly simplifies understanding and writing code.
Additional features include the ability to omit the let keyword in variable and function definitions in playgrounds, an upgrade to LTS Haskell 8.9, and the new Paraíso Dark editor theme (contributed by Simon Holywell).
This version requires macOS 10.11 (El Capitan) upwards.
This exciting new release finally brings a GUI for package management. To install extra packages, you still need to download the Haskell for Mac command line tools (HaskellCLI), but now you don’t need to resort to the command line anymore to use those tools. Once you install the HaskellCLI, Haskell for Mac gains a new Target menu. This new menu provides
(1) a GUI package manager including a list of all packages available from LTS Haskell as well as
(2) the option to run your own command line Haskell programs in a Terminal window right from within Haskell for Mac.
In addition, you can now install the HaskellCLI without any interference with other Haskell systems that you may already have installed on your Mac.
Additional perks in this version are better auto-completion results in modules with code errors, an upgrade to LTS Haskell 6.29, the option to perform type-checking only —without code execution— in playgrounds, and an improved ability to interrupt long running computations.
Haskell for Mac v1.4.0 still builds on GHC 7.10.3 and has not adopted GHC 8 yet. This is as the initial GHC 8 releases had serious bugs on macOS, and LTS Haskell support for GHC 8.0.2 was made available too late in the release process for v1.4.0. Nevertheless, we are working on bringing you GHC 8 support as soon as possible. Moreover, we squashed an annoying bug that could lead to a temporary freezing of the UI or even crashes on switching between files or closing a window.
This version requires macOS 10.11 (El Capitan) upwards.
This release features four bug fixes that are small, but impact usability quite strongly:
(1) During auto-completion, hitting the spacebar cancels completion (and simply adds a space character after the text typed so far). This makes entering newly defined identifiers much more convenient.
(2) When entering a qualified name, on typing '.' after the module prefix, auto-completion displays all identifier exported by that module.
(3) Documentation links in info popovers work more reliably for names defined in hidden modules and re-exported by another module.
(4) It is no longer necessary to import Graphics.SpriteKit to display images in playgrounds.
This really is the last version that supports macOS 10.10 (Yosemite).
Here comes more functional programming goodness! In addition to the obligatory bug fixes, this version includes two main improvements, and a few smaller ones.
Firstly, Haskell for Mac now supports auto-completion of identifiers. Identifiers are completed as you type, taking into account all modules you have imported. As of macOS Sierra, due to a change in macOS, the ESC key on its own doesn't trigger identifier completion anymore. You need to press ⌥-ESC (alt/option with ESC). Luckily, this is much less of an issue now with auto-completion. (Auto-completion can be enabled and disabled in the text editing preferences.)
Secondly, the information popover (triggered by ⌘I or a three finger tap) for function, constructor, and type names now has more details. In particular, it now includes a link to the relevant online documentation. Just click on the name of the module in which the identifier is defined and you will be taken to the relevant portion of the online documentation. This makes it quick and easy to look up the documentation for the libraries that you use.
In playgrounds, you can now preview SVG documents. In fact, you can preview any data type for which you provide an instance of the new Presentable class. For example, if you have got a function that renders a tree datatype in HTML or animates it with SpriteKit, provide a Presentable instance for that tree datatype and you will see the rich presentation, instead of just a text string, in the playground. You can import Presentable from IDE.HaskellForMac.Playground. It only has one method: present :: a -> IO Presentation. You implement it for a new data type by converting the new data type to a type that is already Presentable, such as Blaze.Html or Graphics.SpriteKit.Node, and then, recursively call present on that value.
Finally, by popular request, playgrounds now support GHCi-style :t, :k, and :i commands.
This is the last version that supports macOS 10.10 (Yosemite).
This version includes a major update to the Haskell SpriteKit binding. In particular, the binding now includes support for all core aspects of the physics engine, including collisions and contact handlers. (Fields and joints are not supported yet.)
Haskell for Mac now automatically recognises extra packages that have been installed with the cabal tool from the Haskell CLI. Moreover, this version includes a few minor changes, such as the option to create a new folder during data bucket selection, as well as updates for macOS 10.12 (Sierra).
Upgrade to the internals: we now include over 200 packages from LTS Haskell 5.18.
We introduce data buckets as dedicated locations for file I/O by playground code. This gives playground code controlled access to data outside of the project document and provides support for writing files. Each document has its own data bucket, which can be selected by a new popup button in the toolbar of a project window.
Upgrade to the internals: we now embed version 7.10.3 of the Glasgow Haskell Compiler (GHC) and over 200 packages from LTS 5.9. Hence, some of your Haskell code may need to be adapted to the upgraded library interfaces. Haskell for Mac will prompt you to update old projects.
The ”Edit” menu includes a ”Complete” menu item for identifier completion, which facilitates using a keyboard shortcut other than ESC for identifier completion. Moreover, the package database can now easily be rest in the ”Command Line” tab of the application preferences.
Code pasted (for example, from PDF documents) is now stripped of invisible control characters and Unicode is rendered correctly in the playground console.
Command line tools now include the lexer generator Alex, the parser generator Happy, and the pre-processor cpphs.
Version 1.2.1 also includes a range of bug fixes concerning file creation, playground evaluation, layout, adding external files, Unicode handling & duplicate entries during identifier completion.
Major upgrade to the internals: we now embed version 7.10.2 of the Glasgow Haskell Compiler (GHC), including support for partial type signatures, and over 200 packages from LTS 3.16. Hence, some of your Haskell code may need to be adapted to the upgraded library interfaces.
A major adition to code editing is support for identifier completion. Whenever you type the prefix of an identifier, you can use the ESC key to get a list of imported and locally defined names with that prefix. This also works for qualified names (i.e., identifiers prefixed by a module name).
Optional Haskell command line tools (including ghc, ghci & cabal) may be installed by way of a separate download accessible from the app preferences. The cabal tool enables the installation of extra packages from LTS Haskell 3.16 as well as your own local packages. You can also use these tools to compile your Haskel projects.
Haskell for Mac automatically generates Cabal and Stack configuration files for all Haskell for Mac projects. This simplifies building binaries, including with other Haskell distributions. It also facilitates collaboration.
Line wrapping is now optional (see Text Editing preferences) and playground results have got a new context menu (CTRL-click or right click) to display or copy results and types of results.
The application sandbox now permits outgoing network connections. Hence, you can use networking libraries, such as wreq, in the playground to experiment with client code.
The SpriteKit API now supports obtaining the frame and to calculateAccumulatedFrame of SpriteKit nodes. Moreover, rgbaColor is now a total function.
Version 1.1.0 also includes a fair share of bug fixes concerning features, such as window configuration, layout, adding external files, error popovers & project navigation.