Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Haskell GHC JSON format support (fixes #182) #183

merged 7 commits into from Oct 29, 2018


Copy link

Fixes #182 by adding support for importing the JSON profiling format created by GHC's built in profiling support when the executable is passed the -pj option. Produces a profile group containing both a time and allocation profile.

Unfortunately, GHC doesn't provide the raw sample information to get the time view to be useful, so only left heavy and sandwich are useful.

Includes a test profile, and I've also tested it on a more real large 2MB profile file in the UI and it works great.

I also modified the Readme to link to a wiki page I'm unable to create, but that should have something like this content copy-pasted into it:

Importing from Haskell

GHC provides built in profiling support that can export a JSON file.
In order to do this you need to compile your executable with profiling
support and then pass the -pj RTS flag to the executable.

This will produce a file in the current directory which
you can import into speedscope.

Using GHC

See the GHC manual page on profiling
for more extensive information on the command line flags available.

$ ghc -prof -fprof-auto -rtsopts Main.hs
$ ./Main +RTS -pj -RTS

Using Stack

With executables

$ stack build --profile
$ stack exec -- my-executable +RTS -pj -RTS

With tests

stack test --profile --test-arguments "+RTS -pj -RTS"

Copy link

coveralls commented Oct 26, 2018

Coverage Status

Coverage increased (+0.4%) to 44.868% when pulling 08bb744 on trishume:haskell-support into 86f4ba6 on jlfwong:master.

Copy link

@jlfwong jlfwong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this! 🎉

This looks great. If you accept the suggested changes, then I think this should be good to merge. Once that's done, I'll update the wiki, deploy, and publish the new version to npm.

src/import/haskell.ts Outdated Show resolved Hide resolved
src/import/haskell.ts Outdated Show resolved Hide resolved
src/import/haskell.ts Outdated Show resolved Hide resolved
jlfwong and others added 3 commits October 26, 2018 11:05
Co-Authored-By: trishume <>
Co-Authored-By: trishume <>
Co-Authored-By: trishume <>
Copy link
Contributor Author

Thanks, suggestions applied, such a great new feature.

Although I wish there was a way to apply multiple suggestions in one commit 😐. I wonder if until they add that ability there will be a surge in maintainers using the squash before merging strategy...

@jlfwong jlfwong merged commit e35335f into jlfwong:master Oct 29, 2018
Copy link

jlfwong commented Oct 29, 2018

Thanks @trishume! This is now merged, published to npm, and deployed to I also added the documentation you wrote to the wiki:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet
None yet

Successfully merging this pull request may close these issues.

None yet

3 participants