> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/open-source/use-harness-open-source/pipelines-1/samples/haskell.md).

# Haskell

This guide covers configuring continuous integration pipelines for Haskell projects.

## Build and Test <a href="#build-and-test" id="build-and-test"></a>

In the below example we demonstrate a pipeline that executes `cabal` commands. These commands are executed inside the Haskell Docker container, downloaded at runtime from DockerHub.

```yaml
kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: test
        type: run
        spec:
          container: haskell
          script: |-
            cabal install --only-dependencies --enable-tests
            cabal configure --enable-tests
            cabal build
            cabal test
```

Please note that you can use any Docker image in your pipeline from any Docker registry. You can use the official Haskell [images](https://hub.docker.com/r/_/haskell/), or your can bring your own.

## Test Multiple Versions <a href="#test-multiple-versions" id="test-multiple-versions"></a>

You can configure multiple, containerized steps to test against multiple versions of Haskell.

```yaml
kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: test 8
        type: run
        spec:
          container: haskell:8
          script: |-
            cabal install --only-dependencies --enable-tests
            cabal configure --enable-tests
            cabal build
            cabal test

      - name: test 7
        type: run
        spec:
          container: haskell:7
          script: |-
            cabal install --only-dependencies --enable-tests
            cabal configure --enable-tests
            cabal build
            cabal test
```
