packages feed

casa-reoc-0.1.0.0: casa-reoc.cabal

cabal-version:      2.4
name:               casa-reoc
version:            0.1.0.0
license:            BSD-3-Clause
license-file:       LICENCE
author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ> <dibblego>
maintainer:         Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ> <dibblego>
copyright:          Copyright (c) 2026 System F Aerial Operations Pty Ltd
synopsis:           The documents of a CASA ReOC application, as Haskell data types
category:           Aviation
description:
  <<https://logo.systemf.com.au/systemf-450x450.png>>
  .
  The variables of an application to CASA for the initial issue of a
  remotely piloted aircraft operator's certificate (ReOC), of its RPAS
  operations manual and of its RePL training manual, as data types with
  classy optics. A value of @ReOC@ gives a filled CASA Form 101-02 (XFDF), a
  complete operations manual and, with RePL training, a RePL training manual
  (Flat ODF text).
  .
  == Data types
  .
  Every data type is in its own module under @ReOC.Data@, and every name of a
  field or constructor in its own module under @ReOC.Name@, following the
  classy optics recipe. Values that have an invariant (an ABN, a phone
  number, text that is not blank) are primitive types under
  @ReOC.Primitive@, built with a prism or a literal checked at compile time.
  .
  == Documents
  .
  @ReOC.Render.ApplicationForm@ gives the XFDF of CASA Form 101-02,
  @ReOC.Render.OperationsManual@ the operations manual and
  @ReOC.Render.TrainingManual@ the RePL training manual. @ReOC.Render.Write@
  writes them into a directory. The internal library @examples@ holds the
  applications of four made-up operators.

homepage:           https://gitlab.com/system-f/code/casa-reoc
build-type:         Simple
extra-doc-files:    README.md
                    changelog.md
extra-source-files: etc/casa/rpa-operators-certificate-reoc-initial-issue-variation-renewal-form-101-02.pdf
                    examples/signatures/banksia-point.png
                    template/rpas-operations-manual.fodt
                    template/repl-training-manual.fodt
                    template/repl-training-manual.md
tested-with:        GHC == 9.14.1, GHC == 9.12.4, GHC == 9.10.3, GHC == 9.8.4, GHC == 9.6.7

source-repository head
  type:             git
  location:         https://gitlab.com/system-f/code/casa-reoc.git

flag doctest
  description:      Build the doctest test suite, which runs doctest through cabal. It is enabled in cabal.project, and disabled by default so that builds from the source distribution do not need cabal or doctest at test time.
  default:          False
  manual:           True

flag examples
  description:      Build reoc-examples, which writes the documents of the examples into the examples directory of the repository. It is enabled in cabal.project, and disabled by default so that installing the package does not install it.
  default:          False
  manual:           True

library
  default-language:
                    Haskell2010

  build-depends:
                      base              >= 4.18      && < 5
                    , bytestring        >= 0.11.5.4  && < 0.13
                    , directory         >= 1.3.8.5   && < 2
                    , filepath          >= 1.4.301.0 && < 1.6
                    , lens              >= 5.2.1     && < 6
                    , tagged            >= 0.8.6     && < 0.9
                    , template-haskell  >= 2.20      && < 2.25
                    , text              >= 2.0.2     && < 2.2
                    , time              >= 1.12.2    && < 2
                    , validation        >= 1.1.3     && < 1.2

  ghc-options:
                    -Wall
                    -Wcompat
                    -Wincomplete-record-updates
                    -Wincomplete-uni-patterns
                    -Wredundant-constraints
                    -Werror=incomplete-patterns

  hs-source-dirs:
                    src

  exposed-modules:
                    ReOC
                    ReOC.Aircraft
                    ReOC.Amendment
                    ReOC.Data.Address
                    ReOC.Data.Aircraft
                    ReOC.Data.ApplicationForm
                    ReOC.Data.AustralianState
                    ReOC.Data.BackupInterval
                    ReOC.Data.CRINominee
                    ReOC.Data.CRPNominee
                    ReOC.Data.ChiefExecutive
                    ReOC.Data.ChiefPilot
                    ReOC.Data.Company
                    ReOC.Data.Complexity
                    ReOC.Data.Consequence
                    ReOC.Data.ContactPerson
                    ReOC.Data.CourseType
                    ReOC.Data.Crewing
                    ReOC.Data.Declarant
                    ReOC.Data.Declaration
                    ReOC.Data.Directorship
                    ReOC.Data.EmergencyAction
                    ReOC.Data.Equipment
                    ReOC.Data.ExamDelivery
                    ReOC.Data.Field
                    ReOC.Data.FirstIssue
                    ReOC.Data.FlightTermination
                    ReOC.Data.FlightTestExaminer
                    ReOC.Data.HistoryAnswer
                    ReOC.Data.InstructorTakeover
                    ReOC.Data.Invalid
                    ReOC.Data.InvalidValue
                    ReOC.Data.KeyPersonnel
                    ReOC.Data.KeyPosition
                    ReOC.Data.Likelihood
                    ReOC.Data.MCNominee
                    ReOC.Data.Nominee
                    ReOC.Data.OperatedType
                    ReOC.Data.OperationalExperience
                    ReOC.Data.OperationalHeadquarters
                    ReOC.Data.OperationsManual
                    ReOC.Data.Operator
                    ReOC.Data.OtherReOCRoles
                    ReOC.Data.Person
                    ReOC.Data.PersonnelHistory
                    ReOC.Data.Policies
                    ReOC.Data.PrimaryContact
                    ReOC.Data.RPACategory
                    ReOC.Data.RPAType
                    ReOC.Data.RadioQualification
                    ReOC.Data.ReOC
                    ReOC.Data.ReOCError
                    ReOC.Data.RePLHolding
                    ReOC.Data.RePLOrigin
                    ReOC.Data.RegulatoryAction
                    ReOC.Data.RegulatoryHistory
                    ReOC.Data.RemotePilots
                    ReOC.Data.Revision
                    ReOC.Data.Risk
                    ReOC.Data.RiskAssessment
                    ReOC.Data.RiskLevel
                    ReOC.Data.Step
                    ReOC.Data.TeachingQualification
                    ReOC.Data.TheoryDelivery
                    ReOC.Data.TooMany
                    ReOC.Data.TrainingArrangements
                    ReOC.Data.TrainingCourse
                    ReOC.Data.TrainingMaterial
                    ReOC.Data.Transponder
                    ReOC.Data.Unfilled
                    ReOC.Data.Version
                    ReOC.Data.VersionChange
                    ReOC.Data.WrittenSignature
                    ReOC.Fill
                    ReOC.Help
                    ReOC.Input
                    ReOC.Model
                    ReOC.Name.Abn
                    ReOC.Name.ActionDate
                    ReOC.Name.ActionDetails
                    ReOC.Name.ActionSteps
                    ReOC.Name.ActionTaken
                    ReOC.Name.AdditionalControls
                    ReOC.Name.AddressPostcode
                    ReOC.Name.AddressStateOrTerritory
                    ReOC.Name.AddressStreetAddress
                    ReOC.Name.AddressSuburb
                    ReOC.Name.Aeroplane
                    ReOC.Name.AircraftAssociatedEquipment
                    ReOC.Name.AircraftSerialNumber
                    ReOC.Name.Airframes
                    ReOC.Name.AlcoholHours
                    ReOC.Name.ApplicantIsPrimaryContact
                    ReOC.Name.ApplicationForm
                    ReOC.Name.ApplicationFormDeclaration
                    ReOC.Name.ApplicationFormOtherDocuments
                    ReOC.Name.ApplicationFormPersonnelHistory
                    ReOC.Name.ApplicationFormPrimaryContact
                    ReOC.Name.ApplicationFormProceduresLibrary
                    ReOC.Name.ApplicationFormRegulatoryHistory
                    ReOC.Name.ApplicationFormSignature
                    ReOC.Name.Arn
                    ReOC.Name.AssociatedEquipment
                    ReOC.Name.AtRegisteredOffice
                    ReOC.Name.AustralianCapitalTerritory
                    ReOC.Name.AuthorisationAction
                    ReOC.Name.AutomatedAndManual
                    ReOC.Name.AutomatedOnly
                    ReOC.Name.AviationExperience
                    ReOC.Name.BackupFrequency
                    ReOC.Name.BatteryReserve
                    ReOC.Name.BatteryWarnings
                    ReOC.Name.BeforeFlight
                    ReOC.Name.BlendedTheory
                    ReOC.Name.BusinessName
                    ReOC.Name.Catastrophic
                    ReOC.Name.Category
                    ReOC.Name.CheckingMonths
                    ReOC.Name.ChiefExecutive
                    ReOC.Name.ChiefExecutiveDirectorStatus
                    ReOC.Name.ChiefExecutiveManagementExperience
                    ReOC.Name.ChiefExecutiveNominee
                    ReOC.Name.ChiefExecutiveOfficer
                    ReOC.Name.ChiefPilot
                    ReOC.Name.ChiefPilotCrpNominee
                    ReOC.Name.ChiefPilotOtherReOCRoles
                    ReOC.Name.ChiefPilotRadio
                    ReOC.Name.ChiefPilotRePLOrigin
                    ReOC.Name.ChiefPilotRpaHistory
                    ReOC.Name.ChiefRemotePilot
                    ReOC.Name.ClassroomTheory
                    ReOC.Name.Company
                    ReOC.Name.CompanyAbn
                    ReOC.Name.CompanyArn
                    ReOC.Name.CompanyBusinessName
                    ReOC.Name.CompanyCompanyName
                    ReOC.Name.CompanyEmailAddress
                    ReOC.Name.CompanyName
                    ReOC.Name.CompanyOperationalHeadquarters
                    ReOC.Name.CompanyPhoneNumber
                    ReOC.Name.CompanyRegisteredOffice
                    ReOC.Name.Complexities
                    ReOC.Name.ComputerExamination
                    ReOC.Name.ContactPersonEmailAddress
                    ReOC.Name.ContactPersonFullName
                    ReOC.Name.ContactPersonPhoneNumber
                    ReOC.Name.ContactPersonPosition
                    ReOC.Name.CourseKind
                    ReOC.Name.Crew
                    ReOC.Name.CriConductsFlightTests
                    ReOC.Name.CriIsCEO
                    ReOC.Name.CriIsCRP
                    ReOC.Name.CriIsMC
                    ReOC.Name.CriNominated
                    ReOC.Name.CriNominee
                    ReOC.Name.CriNomineeCriIsCEO
                    ReOC.Name.CriNomineeCriIsCRP
                    ReOC.Name.CriNomineeCriIsMC
                    ReOC.Name.CriNomineeCriNominated
                    ReOC.Name.CriOtherReOCRoles
                    ReOC.Name.CriminalConviction
                    ReOC.Name.CrpIsCEO
                    ReOC.Name.CrpIsOnlyRemotePilot
                    ReOC.Name.CrpNominated
                    ReOC.Name.CrpNominee
                    ReOC.Name.CrpNomineeCrpIsCEO
                    ReOC.Name.CrpNomineeCrpNominated
                    ReOC.Name.Daily
                    ReOC.Name.DateEntered
                    ReOC.Name.DeclarantFullName
                    ReOC.Name.DeclarantRole
                    ReOC.Name.Declaration
                    ReOC.Name.DeclarationDeclaredByAgent
                    ReOC.Name.DeclarationDeclaredByCEO
                    ReOC.Name.DeclarationDeclaredByOther
                    ReOC.Name.DeclarationDeclaredByResponsibleManager
                    ReOC.Name.DeclaredByAgent
                    ReOC.Name.DeclaredByCEO
                    ReOC.Name.DeclaredByOther
                    ReOC.Name.DeclaredByResponsibleManager
                    ReOC.Name.Details
                    ReOC.Name.Director
                    ReOC.Name.DirectorStatus
                    ReOC.Name.DualControllerLink
                    ReOC.Name.DutyHours
                    ReOC.Name.Effective
                    ReOC.Name.EmailAddress
                    ReOC.Name.EmergencyActionActionSteps
                    ReOC.Name.EmergencyActionResponse
                    ReOC.Name.EmergencyActionSituation
                    ReOC.Name.EmergencyActions
                    ReOC.Name.EquipmentDescription
                    ReOC.Name.EquipmentEquipmentDescription
                    ReOC.Name.EquipmentSerialNumber
                    ReOC.Name.Exam
                    ReOC.Name.ExamPassMark
                    ReOC.Name.Examiner
                    ReOC.Name.ExistingControls
                    ReOC.Name.ExtremelyImprobable
                    ReOC.Name.FirstIssue
                    ReOC.Name.FirstIssueDetails
                    ReOC.Name.FirstIssueEffective
                    ReOC.Name.FirstIssueIssueDate
                    ReOC.Name.FirstIssueParts
                    ReOC.Name.FirstIssueVersion
                    ReOC.Name.Fleet
                    ReOC.Name.FlightCrewLicence
                    ReOC.Name.FlightTermination
                    ReOC.Name.FlightTerminationFlightTerminationSystem
                    ReOC.Name.FlightTerminationNoFlightTerminationSystem
                    ReOC.Name.FlightTerminationSystem
                    ReOC.Name.Frequent
                    ReOC.Name.FullName
                    ReOC.Name.GivenElements
                    ReOC.Name.HasOperationalExperience
                    ReOC.Name.Hazard
                    ReOC.Name.Hazardous
                    ReOC.Name.Helicopter
                    ReOC.Name.High
                    ReOC.Name.HistoryAnswerHistoryDisclosed
                    ReOC.Name.HistoryAnswerNoHistory
                    ReOC.Name.HistoryDisclosed
                    ReOC.Name.HoldsRePLForEachType
                    ReOC.Name.Improbable
                    ReOC.Name.IndependentExaminerWhereAvailable
                    ReOC.Name.IndependentReviewYears
                    ReOC.Name.InitialCourse
                    ReOC.Name.InitialRisk
                    ReOC.Name.InspectionHours
                    ReOC.Name.InspectionItems
                    ReOC.Name.InspectionMonths
                    ReOC.Name.InvalidABN
                    ReOC.Name.InvalidARN
                    ReOC.Name.InvalidEmailAddress
                    ReOC.Name.InvalidFormText
                    ReOC.Name.InvalidGrossWeight
                    ReOC.Name.InvalidPassMark
                    ReOC.Name.InvalidPercentage
                    ReOC.Name.InvalidPhoneNumber
                    ReOC.Name.InvalidPositive
                    ReOC.Name.InvalidPostcode
                    ReOC.Name.InvalidReviewMonths
                    ReOC.Name.InvalidText1
                    ReOC.Name.IssueDate
                    ReOC.Name.KeyPersonnel
                    ReOC.Name.KeyPersonnelChiefExecutive
                    ReOC.Name.KeyPersonnelChiefPilot
                    ReOC.Name.KeyPersonnelMcNominee
                    ReOC.Name.Low
                    ReOC.Name.MaintenanceController
                    ReOC.Name.MajorRevision
                    ReOC.Name.MajorVersion
                    ReOC.Name.ManagementExperience
                    ReOC.Name.MaxStudentsPerCourse
                    ReOC.Name.MaxStudentsPerInstructor
                    ReOC.Name.MaximumGrossWeight
                    ReOC.Name.MaybeTrainingMaterial
                    ReOC.Name.McIsCEO
                    ReOC.Name.McIsCRP
                    ReOC.Name.McNominated
                    ReOC.Name.McNominee
                    ReOC.Name.McNomineeMcIsCEO
                    ReOC.Name.McNomineeMcIsCRP
                    ReOC.Name.McNomineeMcNominated
                    ReOC.Name.Medium
                    ReOC.Name.Minor
                    ReOC.Name.MinorRevision
                    ReOC.Name.MinorVersion
                    ReOC.Name.Moderate
                    ReOC.Name.Monthly
                    ReOC.Name.MonthsAfter
                    ReOC.Name.MostElements
                    ReOC.Name.Multirotor
                    ReOC.Name.Negligible
                    ReOC.Name.NewSouthWales
                    ReOC.Name.NoFlightTerminationSystem
                    ReOC.Name.NoHistory
                    ReOC.Name.NoOtherReOCRoles
                    ReOC.Name.NoRadioQualification
                    ReOC.Name.NoRegulatoryAction
                    ReOC.Name.NoTransponder
                    ReOC.Name.Nominee
                    ReOC.Name.NomineeAviationExperience
                    ReOC.Name.NomineeOtherQualifications
                    ReOC.Name.NomineePerson
                    ReOC.Name.NorthernTerritory
                    ReOC.Name.NotADirector
                    ReOC.Name.Occasional
                    ReOC.Name.OnlineTheory
                    ReOC.Name.OperatedTypeAirframes
                    ReOC.Name.OperatedTypeRpaType
                    ReOC.Name.OperationalExperience
                    ReOC.Name.OperationalExperienceHasOperationalExperience
                    ReOC.Name.OperationalExperienceIntent
                    ReOC.Name.OperationalExperienceNotApplicable
                    ReOC.Name.OperationalExperienceOperationalExperienceIntent
                    ReOC.Name.OperationalExperienceOperationalExperienceNotApplicable
                    ReOC.Name.OperationalHeadquarters
                    ReOC.Name.OperationalHeadquartersAddress
                    ReOC.Name.OperationalHeadquartersAtRegisteredOffice
                    ReOC.Name.OperationalHeadquartersOperationalHeadquartersAddress
                    ReOC.Name.OperationsManual
                    ReOC.Name.OperationsManualCrew
                    ReOC.Name.OperationsManualFirstIssue
                    ReOC.Name.OperationsManualPilots
                    ReOC.Name.OperationsManualPolicies
                    ReOC.Name.OperationsManualRevisions
                    ReOC.Name.OperationsManualRiskRegister
                    ReOC.Name.OperationsManualServices
                    ReOC.Name.Operator
                    ReOC.Name.OperatorCompany
                    ReOC.Name.OperatorFleet
                    ReOC.Name.OperatorKeyPersonnel
                    ReOC.Name.OtherDocuments
                    ReOC.Name.OtherQualifications
                    ReOC.Name.OtherReOCRoles
                    ReOC.Name.OtherReOCRolesHeld
                    ReOC.Name.OtherReOCRolesNoOtherReOCRoles
                    ReOC.Name.OtherReOCRolesOtherReOCRolesHeld
                    ReOC.Name.OtherRemotePilots
                    ReOC.Name.PaperExamination
                    ReOC.Name.Parts
                    ReOC.Name.Path
                    ReOC.Name.Person
                    ReOC.Name.PersonArn
                    ReOC.Name.PersonEmailAddress
                    ReOC.Name.PersonFullName
                    ReOC.Name.PersonPhoneNumber
                    ReOC.Name.PersonnelHistory
                    ReOC.Name.PersonnelHistoryActionTaken
                    ReOC.Name.PersonnelHistoryCriminalConviction
                    ReOC.Name.PersonnelHistorySuspensionPending
                    ReOC.Name.PersonnelHistoryTransportLicenceRefused
                    ReOC.Name.PhoneNumber
                    ReOC.Name.Pilots
                    ReOC.Name.Policies
                    ReOC.Name.PoliciesAlcoholHours
                    ReOC.Name.PoliciesBackupFrequency
                    ReOC.Name.PoliciesBatteryReserve
                    ReOC.Name.PoliciesCheckingMonths
                    ReOC.Name.PoliciesDutyHours
                    ReOC.Name.PoliciesIndependentReviewYears
                    ReOC.Name.PoliciesInspectionHours
                    ReOC.Name.PoliciesInspectionMonths
                    ReOC.Name.PoliciesRecencyDays
                    ReOC.Name.PoliciesRecencyFlights
                    ReOC.Name.PoliciesRefresherMonths
                    ReOC.Name.PoliciesRestHours
                    ReOC.Name.Position
                    ReOC.Name.Postcode
                    ReOC.Name.PoweredLift
                    ReOC.Name.PplTheory
                    ReOC.Name.PracticalAreas
                    ReOC.Name.PrimaryContact
                    ReOC.Name.PrimaryContactApplicantIsPrimaryContact
                    ReOC.Name.PrimaryContactPerson
                    ReOC.Name.PrimaryContactPrimaryContactPerson
                    ReOC.Name.ProceduresLibrary
                    ReOC.Name.Queensland
                    ReOC.Name.Radio
                    ReOC.Name.RadioOperatorCertificate
                    ReOC.Name.ReOCApplicationForm
                    ReOC.Name.ReOCMaybeTrainingMaterial
                    ReOC.Name.ReOCOperationsManual
                    ReOC.Name.ReOCOperator
                    ReOC.Name.RePLHolding
                    ReOC.Name.RePLHoldingHoldsRePLForEachType
                    ReOC.Name.RePLHoldingIntent
                    ReOC.Name.RePLHoldingRePLHoldingIntent
                    ReOC.Name.RePLOrigin
                    ReOC.Name.RePLOriginPplTheory
                    ReOC.Name.RePLOriginRePLTrainingOrganisation
                    ReOC.Name.RePLTrainingOrganisation
                    ReOC.Name.RecencyDays
                    ReOC.Name.RecencyFlights
                    ReOC.Name.RefresherMonths
                    ReOC.Name.RegisteredOffice
                    ReOC.Name.RegulatoryActionActionDate
                    ReOC.Name.RegulatoryActionActionDetails
                    ReOC.Name.RegulatoryActionAuthorisationAction
                    ReOC.Name.RegulatoryActionReocSuspendedOrCancelled
                    ReOC.Name.RegulatoryActionTaken
                    ReOC.Name.RegulatoryActionTypeOfAction
                    ReOC.Name.RegulatoryHistory
                    ReOC.Name.RegulatoryHistoryNoRegulatoryAction
                    ReOC.Name.RegulatoryHistoryRegulatoryActionTaken
                    ReOC.Name.Remote
                    ReOC.Name.ReocSuspendedOrCancelled
                    ReOC.Name.ResidualRisk
                    ReOC.Name.Response
                    ReOC.Name.RestHours
                    ReOC.Name.ReviewMonths
                    ReOC.Name.RevisionDetails
                    ReOC.Name.RevisionEffective
                    ReOC.Name.RevisionMonthsAfter
                    ReOC.Name.RevisionParts
                    ReOC.Name.RevisionVersionIncrement
                    ReOC.Name.Revisions
                    ReOC.Name.RiskAdditionalControls
                    ReOC.Name.RiskAssessmentRiskConsequence
                    ReOC.Name.RiskAssessmentRiskLikelihood
                    ReOC.Name.RiskConsequence
                    ReOC.Name.RiskDateEntered
                    ReOC.Name.RiskDescription
                    ReOC.Name.RiskExistingControls
                    ReOC.Name.RiskHazard
                    ReOC.Name.RiskInitialRisk
                    ReOC.Name.RiskLikelihood
                    ReOC.Name.RiskOwner
                    ReOC.Name.RiskRegister
                    ReOC.Name.RiskResidualRisk
                    ReOC.Name.RiskReviewMonths
                    ReOC.Name.RiskRiskDescription
                    ReOC.Name.RiskRiskOwner
                    ReOC.Name.Role
                    ReOC.Name.RpaHistory
                    ReOC.Name.RpaMake
                    ReOC.Name.RpaModel
                    ReOC.Name.RpaType
                    ReOC.Name.RpaTypeBatteryWarnings
                    ReOC.Name.RpaTypeBeforeFlight
                    ReOC.Name.RpaTypeCategory
                    ReOC.Name.RpaTypeEmergencyActions
                    ReOC.Name.RpaTypeFlightTermination
                    ReOC.Name.RpaTypeInspectionItems
                    ReOC.Name.RpaTypeMaximumGrossWeight
                    ReOC.Name.RpaTypeRpaMake
                    ReOC.Name.RpaTypeRpaModel
                    ReOC.Name.RpaTypeShortName
                    ReOC.Name.RpaTypeTransponderCarriage
                    ReOC.Name.RpaTypeUserManual
                    ReOC.Name.SerialNumber
                    ReOC.Name.Services
                    ReOC.Name.SharedController
                    ReOC.Name.ShortName
                    ReOC.Name.Signature
                    ReOC.Name.Simulator
                    ReOC.Name.Situation
                    ReOC.Name.SoleDirector
                    ReOC.Name.SoloAndMultiCrewOperations
                    ReOC.Name.SoloOperationsOnly
                    ReOC.Name.SouthAustralia
                    ReOC.Name.StateOrTerritory
                    ReOC.Name.StepIndex
                    ReOC.Name.StreetAddress
                    ReOC.Name.Suburb
                    ReOC.Name.SuspensionPending
                    ReOC.Name.Takeover
                    ReOC.Name.Tasmania
                    ReOC.Name.TeachingQualification
                    ReOC.Name.TeachingQualificationHeld
                    ReOC.Name.TeachingQualificationIntent
                    ReOC.Name.TeachingQualificationTeachingQualificationHeld
                    ReOC.Name.TeachingQualificationTeachingQualificationIntent
                    ReOC.Name.Theory
                    ReOC.Name.TheoryVenues
                    ReOC.Name.TrainingArrangements
                    ReOC.Name.TrainingArrangementsExam
                    ReOC.Name.TrainingArrangementsExamPassMark
                    ReOC.Name.TrainingArrangementsExaminer
                    ReOC.Name.TrainingArrangementsMaxStudentsPerCourse
                    ReOC.Name.TrainingArrangementsMaxStudentsPerInstructor
                    ReOC.Name.TrainingArrangementsPracticalAreas
                    ReOC.Name.TrainingArrangementsSimulator
                    ReOC.Name.TrainingArrangementsTakeover
                    ReOC.Name.TrainingArrangementsTheory
                    ReOC.Name.TrainingArrangementsTheoryVenues
                    ReOC.Name.TrainingCourseComplexities
                    ReOC.Name.TrainingCourseCourseKind
                    ReOC.Name.TrainingCourseTrainingRPA
                    ReOC.Name.TrainingCourses
                    ReOC.Name.TrainingMaterialCriNominee
                    ReOC.Name.TrainingMaterialCriOtherReOCRoles
                    ReOC.Name.TrainingMaterialOperationalExperience
                    ReOC.Name.TrainingMaterialRePLHolding
                    ReOC.Name.TrainingMaterialTeachingQualification
                    ReOC.Name.TrainingMaterialTrainingArrangements
                    ReOC.Name.TrainingMaterialTrainingCourses
                    ReOC.Name.TrainingRPA
                    ReOC.Name.TransponderCarriage
                    ReOC.Name.TransponderFitted
                    ReOC.Name.TransportLicenceRefused
                    ReOC.Name.TypeOfAction
                    ReOC.Name.UpgradeDifferentCategory
                    ReOC.Name.UpgradeSameCategory
                    ReOC.Name.UserManual
                    ReOC.Name.Version
                    ReOC.Name.VersionIncrement
                    ReOC.Name.VersionMajorVersion
                    ReOC.Name.VersionMinorVersion
                    ReOC.Name.Victoria
                    ReOC.Name.Weekly
                    ReOC.Name.WesternAustralia
                    ReOC.Name.WrittenSignatureFile
                    ReOC.Name.WrittenSignatureImage
                    ReOC.Name.WrittenSignatureWrittenSignatureFile
                    ReOC.Name.WrittenSignatureWrittenSignatureImage
                    ReOC.Personnel
                    ReOC.Primitive.ABN
                    ReOC.Primitive.ARN
                    ReOC.Primitive.AtMost
                    ReOC.Primitive.EmailAddress
                    ReOC.Primitive.FormFont
                    ReOC.Primitive.FormText
                    ReOC.Primitive.GrossWeight
                    ReOC.Primitive.PassMark
                    ReOC.Primitive.Percentage
                    ReOC.Primitive.PhoneNumber
                    ReOC.Primitive.Positive
                    ReOC.Primitive.Postcode
                    ReOC.Primitive.ReviewMonths
                    ReOC.Primitive.Some
                    ReOC.Primitive.Text1
                    ReOC.Render.ApplicationForm
                    ReOC.Render.Base64
                    ReOC.Render.BlankForm
                    ReOC.Render.BuildInfo
                    ReOC.Render.Embed
                    ReOC.Render.Error
                    ReOC.Render.Markdown
                    ReOC.Render.Markdown.Block
                    ReOC.Render.Odf
                    ReOC.Render.OperationsManual
                    ReOC.Render.OperationsManual.Diagram
                    ReOC.Render.OperationsManual.Holes
                    ReOC.Render.Template
                    ReOC.Render.Text
                    ReOC.Render.TrainingManual
                    ReOC.Render.TrainingManual.Body
                    ReOC.Render.TrainingManual.Chunk
                    ReOC.Render.TrainingManual.Embed
                    ReOC.Render.TrainingManual.Holes
                    ReOC.Render.TrainingManual.Markup
                    ReOC.Render.Write
                    ReOC.Risk

-- Example applications of made-up operators.
library examples
  default-language:
                    Haskell2010

  build-depends:
                      base              >= 4.18      && < 5
                    , lens              >= 5.2.1     && < 6
                    , casa-reoc
                    , text              >= 2.0.2     && < 2.2
                    , time              >= 1.12.2    && < 2

  ghc-options:
                    -Wall
                    -Wcompat
                    -Wincomplete-record-updates
                    -Wincomplete-uni-patterns
                    -Wredundant-constraints
                    -Werror=incomplete-patterns

  hs-source-dirs:
                    examples/src

  exposed-modules:
                    ReOC.Example.Aircraft
                    ReOC.Example.BanksiaPoint
                    ReOC.Example.Draft
                    ReOC.Example.Ironbark
                    ReOC.Example.Policies
                    ReOC.Example.Risk
                    ReOC.Example.Saltbush
                    ReOC.Example.WattleCreek
                    ReOC.Examples

-- Writes the documents of each example into examples.
executable reoc-examples
  if !flag(examples)
    buildable:      False

  main-is:
                    write-examples.hs

  default-language:
                    Haskell2010

  build-depends:
                      base              >= 4.18      && < 5
                    , examples
                    , filepath          >= 1.4.301.0 && < 1.6
                    , casa-reoc
                    , text              >= 2.0.2     && < 2.2

  ghc-options:
                    -Wall
                    -Wcompat
                    -Wincomplete-record-updates
                    -Wincomplete-uni-patterns

  hs-source-dirs:
                    examples

test-suite hedgehog
  type:
                    exitcode-stdio-1.0

  main-is:
                    hedgehog_tests.hs

  other-modules:
                    DataGens
                    FormFields
                    Laws
                    OpticsTests
                    PrimitiveGens
                    RenderTests

  default-language:
                    Haskell2010

  build-depends:
                      base              >= 4.18      && < 5
                    , containers        >= 0.6.7     && < 0.9
                    , bytestring        >= 0.11.5.4  && < 0.13
                    , directory         >= 1.3.8.5   && < 2
                    , examples
                    , filepath          >= 1.4.301.0 && < 1.6
                    , hedgehog          >= 1.2       && < 2
                    , lens              >= 5.2.1     && < 6
                    , casa-reoc
                    , text              >= 2.0.2     && < 2.2
                    , time              >= 1.12.2    && < 2
                    , xml-conduit       >= 1.9       && < 1.11

  ghc-options:
                    -Wall
                    -threaded
                    -rtsopts
                    "-with-rtsopts=-N"

  hs-source-dirs:
                    test

test-suite doctest
  type:
                    exitcode-stdio-1.0

  if !flag(doctest)
    buildable:      False

  main-is:
                    doctest_tests.hs

  default-language:
                    Haskell2010

  build-depends:
                      base    >= 4.18     && < 5
                    , process >= 1.6.19.0 && < 2
                    , casa-reoc

  ghc-options:
                    -Wall
                    -threaded

  hs-source-dirs:
                    test