MyNixOS website logo
Description

Strongly typed paths in Haskell.

Replacement for a FilePath that enables you to handle filepaths in your code in a type-safe manner. You can specify at type level if they are relative, absolute, file, directory, posix, windows, and even to which file or directory they point to or are relative to.

StrongPath

CI Documentation Hackage Stackage LTS Stackage Nightly

Strongly typed file paths in Haskell.

This library provides a strongly typed representation of file paths, providing more safety during compile time while also making code more readable, compared to the standard solution (FilePath, which is really just String).

Without StrongPath:

getBashProfile :: IO FilePath

With StrongPath:

getBashProfile :: IO (Path System (Rel HomeDir) (File BashProfile))

Simple but complete example:

import StrongPath (Path, System, Abs, Dir, parseAbsDir)

data HomeDir

getHomeDirPath :: IO (Path System Abs (Dir HomeDir))
getHomeDirPath = getLine >>= fromJust . parseAbsDir

Check documentation for more details!

Documentation

Detailed documentation, including rich examples and API is written via Haddock.

Check out the latest documentation on Hackage: Documentation.

You can also build and view the Haddock documentation yourself if you wish, by running stack haddock --open.

Contributing / development

We are using ormolu for code formatting. In order for the PR to pass, it needs to be formatted by ormolu.

strong-path is Stack project, so make sure you have stack installed on your machine.

stack build to build the project, stack test to run the tests.

stack build --file-watch --haddock to rebuild documentation as you change it.

Publishing to Hackage

First, make sure to update the version of package in package.yaml, if needed.

Then, stack sdist to build publishable .tar.gz., and then we need to upload it manually to Hackage.

Check if Hackage correctly built the Haddock docs -> if not, you need to upload them manually (check Hackage webpage for instructions, it should be smth like cabal v2-haddock --haddock-for-hackage --enable-doc and then cabal upload -d --publish <path_to_docs.tar.gz>).

We should also tag the commit in git with version tag (e.g. v1.0.0.0) so we know which version of code was used to produce that release.

Metadata

Version

1.1.4.0

License

Platforms (77)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows