Giter Club home page Giter Club logo

ghc-mod's Introduction

ghc-mod: Happy Haskell Hacking

build status

ghc-mod provides editors/IDEs with support for Haskell compiler features, it supports both Cabal and Stack based projects and integrations exist for Emacs, Vim, Atom, IntelliJ and VSCode.

Overview

Using ghc-mod in your Development Environment

To use ghc-mod in your development environment of choice you need two things:

  • The ghc-mod program included in the package of the same name, see Installing
  • A ghc-mod frontend to integrate it into your development environment, see Frontend

Using ghc-mod as an IDE Backend Program

We provide two modes of operation for frontends: interactive and single shot mode. The former is accessed by calling $ ghc-mod legacy-interactive this will sit and wait for you to type a command and exit when an empty line is entered. Interactive mode is pretty much always faster than single shot mode since it gives ghc-mod the ability to cache the compiler session between commands on the other hand it needs more memory because it keeps these things cached.

Single shot mode is pretty much only there for (backwards) compatibility with Vim since it only recently got the ability to talk to background processes without installing some external plugin. You can use single-shot mode by simply calling the sub-comamnds of the ghc-mod program. Since re-compiling large projects can be really, really slow you really shouldn't use this and use interactive mode instead.

As a rule of thumb all commands available in single shot mode are available in interactive mode, a list of the former can be obtained by running $ ghc-mod --help.

If you're developing a new ghc-mod fronted we'd love to hear from you! Please open an issue or e-mail the maintainer. Also we invite you to add installation and configuration instructions to Frontend.

Using ghc-mod as a Library

Internally ghc-mod uses the Glasgow Haskell Compilers's API to implement most of it's functionality.

In order to provide a hassle free experience to users ghc-mod tries hard to automatically, and correctly, detect and if needed tweak the environment GHC needs. It also handles some of the more cumbersome parts of getting a working compiler session up and running.

This functionality can be very useful to all kinds of Haskell development tools therefore want to expose all the useful abstractions ghc-mod provides.

Right now the ghc-mod API is pretty messy; a result of major internal rewrites and reorganization coupled with too little time for cleanups over the course of almost 100 releases! We would like to make a cut during v6.0 or so and completely re-do the API but we need more input from downstream tool writers to do that properly, see Library API Redesign.

For example The Haskell Refactorer (HaRe) uses the build environment abstraction ghc-mod provides so it can concentrate on it's core functionality instead of worrying about build environments and compiler session setup.

Recently the haskell-ide-engine project has sprung up and if you're planning to write any kind of tool that needs editor integration eventually you should definetly look into that. haskell-ide-engine uses ghc-mod at it's core so you'll want to be familliar with it either way.

API "documentation" is here: Hackage docs.

Reporting Bugs

Please report bugs on the GitHub issue tracker for ghc-mod: https://github.com/DanielG/ghc-mod/issues

Including general environment information like the operating system (distribution, version) you're using and the output of $ ghc-mod debug run in your project directory is probably a good idea.

IRC

If you have any problems, suggestions, comments swing by #ghc-mod (web client) on Freenode. If you're reporting a bug please also create an issue here (GitHub issue tracker) so we have a way to contact you if you don't have time to stay.

Do hang around for a while if no one answers and repeat your question if you still haven't gotten any answer after a day or so (the maintainer was probably asleep). You're most likely to get an answer during the day in GMT+1.

ghc-mod's People

Contributors

acowley avatar alanz avatar cocreature avatar conal avatar danielg avatar dschoepe avatar dysinger avatar eagletmt avatar expipiplus1 avatar iquiw avatar kazu-yamamoto avatar khibino avatar konn avatar lierdakil avatar markus1189 avatar mvoidex avatar naota avatar nh2 avatar notogawa avatar nrolland avatar pcapriotti avatar peti avatar robeverest avatar rubenastudillo avatar schell avatar scturtle avatar sergv avatar serras avatar tanakh avatar vigoo avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.