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
cabal-version:      3.0
name:               my-tools
version:            0.0.1.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:
      MyTools

    build-depends:
       base >=4.15 && <5
     , my-prelude
     , pa-label
     , pa-error-tree
     , filepath
     , directory
     , process
     , time
     , text
     , optparse-simple
     , optparse-applicative


executable copy
    import: common-options
    hs-source-dirs: exe
    build-depends:
      base,
      my-tools
    main-is: Copy.hs


executable camera
    import: common-options
    hs-source-dirs: exe
    build-depends:
      base,
      my-tools
    main-is: Camera.hs