1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
cabal-version:      3.0
name:               whatcd-resolver
version:            0.1.0.0
author:             Profpatsch
maintainer:         mail@profpatsch.de

common common-options
  ghc-options:
      -Wall
      -Wno-type-defaults
      -Wunused-packages
      -Wredundant-constraints
      -fwarn-missing-deriving-strategies

  -- See https://downloads.haskell.org/ghc/latest/docs/users_guide/exts.html
  -- for a description of all these extensions
  default-extensions:
      -- Infer Applicative instead of Monad where possible
    ApplicativeDo

    -- Allow literal strings to be Text
    OverloadedStrings

    -- Syntactic sugar improvements
    LambdaCase
    MultiWayIf

    -- Makes the (deprecated) usage of * instead of Data.Kind.Type an error
    NoStarIsType

    -- Convenient and crucial to deal with ambiguous field names, commonly
    -- known as RecordDotSyntax
    OverloadedRecordDot

    -- Make #labels available
    OverloadedLabels

    -- does not export record fields as functions, use OverloadedRecordDot to access instead
    NoFieldSelectors

    -- Allow the same record field name to be declared twice per module.
    -- This works, because we use `OverloadedRecordDot` everywhere (enforced by `NoFieldSelectors`).
    DuplicateRecordFields

    -- Record punning
    RecordWildCards

    -- Improved Deriving
    DerivingStrategies
    DerivingVia

    -- Type-level strings
    DataKinds

    -- to enable the `type` keyword in import lists (ormolu uses this automatically)
    ExplicitNamespaces

    -- allows defining pattern synonyms, but also the `import Foo (pattern FooPattern)` import syntax
    PatternSynonyms

  default-language: GHC2021

library
    import: common-options

    hs-source-dirs: src

    exposed-modules:
       WhatcdResolver
       AppT
       Bencode
       JsonLd
       Optional
       Http
       Html
       Transmission
       Redacted

    build-depends:
        base >=4.15 && <5,
        text,
        my-prelude,
        my-webstuff,
        my-prelude,
        pa-error-tree,
        pa-label,
        pa-run-command,
        aeson-better-errors,
        aeson,
        bencode,
        blaze-html,
        blaze-markup,
        bytestring,
        case-insensitive,
        conduit,
        containers,
        unordered-containers,
        directory,
        exceptions,
        filepath,
        hs-opentelemetry-sdk,
        hs-opentelemetry-api,
        http-conduit,
        http-types,
        http-client,
        ihp-hsx,
        monad-logger,
        mtl,
        network-uri,
        typed-process,
        resourcet,
        resource-pool,
        postgresql-simple,
        punycode,
        tmp-postgres,
        time,
        unliftio,
        wai-extra,
        wai,
        warp,

executable whatcd-resolver
    import: common-options

    main-is: Main.hs

    build-depends:
        base >=4.15 && <5,
        whatcd-resolver

    ghc-options:
      -threaded
      -- run idle GC only every 2 minutes to reduce CPU load
      -with-rtsopts=-I120