...
...
...
Solid is a modern remix of (GHC) Haskell with a focus on productivity and joy for programmers.
git clone [email protected]:sol/solid.git
cd solid
cabal install
#!/usr/bin/env solid
names :: [String]
names = ["Jane", "Joe"]
main :: IO ()
main = do
name <- names.randomChoice
stdout.writeLine "Hey \{name} 👋"-- or point-free
main :: IO ()
main = stdout.writeLine . "Hey \{} 👋" =<< names.randomChoice$ solid main.hs
Hey Jane 👋
or
$ chmod +x main.hs
$ ./main.hs
Hey Joe 👋
Read: book/README.md
solid installs GHC 9.10.1 to a private location. It does not use any system
provided GHC.
solid caches packages in ~/.local/state/solid/store/. It does not use the
user-global cabal store.
It is possible to use Haskell Language Server to get LSP diagnostics while developing a script. This requires the following configuration file next to your script:
# hie.yaml
cradle:
bios:
shell: "solid ghc-options $HIE_BIOS_ARG > $HIE_BIOS_OUTPUT"You can use third-party tools that expect GHC options with solid.
Example:
# start a GHCi session
$ solid with ghci main.hs# run doctest
$ solid with doctest main.hs# run sensei
$ solid with sensei main.hssolid with does two things:
- It puts a suitable version of GHC on the
PATH - It calls the specified executable with all required GHC options
solid with can be used to run doctest. However, this only works if a
suitable version of doctest is available on the PATH. solid doctest
provides a more robust way to run doctest.
Example:
$ solid doctest main.hsAs of now, solid does not provide a mechanism to manage third-party
dependencies. This limitation will be lifted eventually.
However, solid accepts arbitrary GHC options, including -package, which can
be used to specify arbitrary additional Haskell dependencies.
Example:
$ solid with ghci -package=hspec -package=QuickCheck test/Spec.hsNote that for this to work, a version of the requested package has to be
present in the cabal store. If a package is not yet in the cabal store, then
you have to populate the cabal store manually, e.g. with cabal repl --build-depends.
Example:
$ echo | cabal repl --build-depends hspec,QuickCheckThis section lists semantic differences from Haskell that are not caught by the type system.
ByteString.stripandByteString.wordsonly consider ASCII spaces. This has the advantage that they can be safely used on UTF-8 input. (unlike their counterparts inData.ByteString.Char8)
-
The
whereinmodule ... wherehas to be followed by a newline, e.g. this is not supported:module Foo where bar :: Int bar = 23