packages feed

casa-reoc-0.1.0.0: src/ReOC/Data/Step.hs

{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -Wall #-}
-- The checks of inheritance (inheritStep) have a constraint that their body does not use, by design.
{-# OPTIONS_GHC -Wno-redundant-constraints #-}

-- | The data type @Step@: a step of the path from the whole form to a field: a field or constructor, or the index of an element of a list.
module ReOC.Data.Step (
  Step (..),
  StepLike (..),
  lawNamesStep,
  InheritStep,
  inheritStep,
  inheritsStep,
) where

import Control.Lens (Choice, Optic, prism', review)
import Data.Functor.Const (Const)
import Data.Proxy (Proxy (..))
import Numeric.Natural (Natural)
import ReOC.Data.Field (Field, FieldLike (..), inheritField)
import ReOC.Name.AddressPostcode (AddressPostcodeLike (..))
import ReOC.Name.AddressStateOrTerritory (AddressStateOrTerritoryLike (..))
import ReOC.Name.AddressStreetAddress (AddressStreetAddressLike (..))
import ReOC.Name.AddressSuburb (AddressSuburbLike (..))
import ReOC.Name.AircraftAssociatedEquipment (AircraftAssociatedEquipmentLike (..))
import ReOC.Name.AircraftSerialNumber (AircraftSerialNumberLike (..))
import ReOC.Name.ApplicationFormDeclaration (ApplicationFormDeclarationLike (..))
import ReOC.Name.ApplicationFormOtherDocuments (ApplicationFormOtherDocumentsLike (..))
import ReOC.Name.ApplicationFormPersonnelHistory (ApplicationFormPersonnelHistoryLike (..))
import ReOC.Name.ApplicationFormPrimaryContact (ApplicationFormPrimaryContactLike (..))
import ReOC.Name.ApplicationFormProceduresLibrary (ApplicationFormProceduresLibraryLike (..))
import ReOC.Name.ApplicationFormRegulatoryHistory (ApplicationFormRegulatoryHistoryLike (..))
import ReOC.Name.ApplicationFormSignature (ApplicationFormSignatureLike (..))
import ReOC.Name.ChiefExecutiveDirectorStatus (ChiefExecutiveDirectorStatusLike (..))
import ReOC.Name.ChiefExecutiveManagementExperience (ChiefExecutiveManagementExperienceLike (..))
import ReOC.Name.ChiefExecutiveNominee (ChiefExecutiveNomineeLike (..))
import ReOC.Name.ChiefPilotCrpNominee (ChiefPilotCrpNomineeLike (..))
import ReOC.Name.ChiefPilotOtherReOCRoles (ChiefPilotOtherReOCRolesLike (..))
import ReOC.Name.ChiefPilotRadio (ChiefPilotRadioLike (..))
import ReOC.Name.ChiefPilotRePLOrigin (ChiefPilotRePLOriginLike (..))
import ReOC.Name.ChiefPilotRpaHistory (ChiefPilotRpaHistoryLike (..))
import ReOC.Name.CompanyAbn (CompanyAbnLike (..))
import ReOC.Name.CompanyArn (CompanyArnLike (..))
import ReOC.Name.CompanyBusinessName (CompanyBusinessNameLike (..))
import ReOC.Name.CompanyCompanyName (CompanyCompanyNameLike (..))
import ReOC.Name.CompanyEmailAddress (CompanyEmailAddressLike (..))
import ReOC.Name.CompanyOperationalHeadquarters (CompanyOperationalHeadquartersLike (..))
import ReOC.Name.CompanyPhoneNumber (CompanyPhoneNumberLike (..))
import ReOC.Name.CompanyRegisteredOffice (CompanyRegisteredOfficeLike (..))
import ReOC.Name.ContactPersonEmailAddress (ContactPersonEmailAddressLike (..))
import ReOC.Name.ContactPersonFullName (ContactPersonFullNameLike (..))
import ReOC.Name.ContactPersonPhoneNumber (ContactPersonPhoneNumberLike (..))
import ReOC.Name.ContactPersonPosition (ContactPersonPositionLike (..))
import ReOC.Name.CriNomineeCriIsCEO (CriNomineeCriIsCEOLike (..))
import ReOC.Name.CriNomineeCriIsCRP (CriNomineeCriIsCRPLike (..))
import ReOC.Name.CriNomineeCriIsMC (CriNomineeCriIsMCLike (..))
import ReOC.Name.CriNomineeCriNominated (CriNomineeCriNominatedLike (..))
import ReOC.Name.CrpNomineeCrpIsCEO (CrpNomineeCrpIsCEOLike (..))
import ReOC.Name.CrpNomineeCrpNominated (CrpNomineeCrpNominatedLike (..))
import ReOC.Name.DeclarantFullName (DeclarantFullNameLike (..))
import ReOC.Name.DeclarantRole (DeclarantRoleLike (..))
import ReOC.Name.DeclarationDeclaredByAgent (DeclarationDeclaredByAgentLike (..))
import ReOC.Name.DeclarationDeclaredByCEO (DeclarationDeclaredByCEOLike (..))
import ReOC.Name.DeclarationDeclaredByOther (DeclarationDeclaredByOtherLike (..))
import ReOC.Name.DeclarationDeclaredByResponsibleManager (DeclarationDeclaredByResponsibleManagerLike (..))
import ReOC.Name.EmergencyActionActionSteps (EmergencyActionActionStepsLike (..))
import ReOC.Name.EmergencyActionResponse (EmergencyActionResponseLike (..))
import ReOC.Name.EmergencyActionSituation (EmergencyActionSituationLike (..))
import ReOC.Name.EquipmentEquipmentDescription (EquipmentEquipmentDescriptionLike (..))
import ReOC.Name.EquipmentSerialNumber (EquipmentSerialNumberLike (..))
import ReOC.Name.FirstIssueDetails (FirstIssueDetailsLike (..))
import ReOC.Name.FirstIssueEffective (FirstIssueEffectiveLike (..))
import ReOC.Name.FirstIssueIssueDate (FirstIssueIssueDateLike (..))
import ReOC.Name.FirstIssueParts (FirstIssuePartsLike (..))
import ReOC.Name.FirstIssueVersion (FirstIssueVersionLike (..))
import ReOC.Name.FlightTerminationFlightTerminationSystem (FlightTerminationFlightTerminationSystemLike (..))
import ReOC.Name.FlightTerminationNoFlightTerminationSystem (FlightTerminationNoFlightTerminationSystemLike (..))
import ReOC.Name.HistoryAnswerHistoryDisclosed (HistoryAnswerHistoryDisclosedLike (..))
import ReOC.Name.HistoryAnswerNoHistory (HistoryAnswerNoHistoryLike (..))
import ReOC.Name.KeyPersonnelChiefExecutive (KeyPersonnelChiefExecutiveLike (..))
import ReOC.Name.KeyPersonnelChiefPilot (KeyPersonnelChiefPilotLike (..))
import ReOC.Name.KeyPersonnelMcNominee (KeyPersonnelMcNomineeLike (..))
import ReOC.Name.McNomineeMcIsCEO (McNomineeMcIsCEOLike (..))
import ReOC.Name.McNomineeMcIsCRP (McNomineeMcIsCRPLike (..))
import ReOC.Name.McNomineeMcNominated (McNomineeMcNominatedLike (..))
import ReOC.Name.NomineeAviationExperience (NomineeAviationExperienceLike (..))
import ReOC.Name.NomineeOtherQualifications (NomineeOtherQualificationsLike (..))
import ReOC.Name.NomineePerson (NomineePersonLike (..))
import ReOC.Name.OperatedTypeAirframes (OperatedTypeAirframesLike (..))
import ReOC.Name.OperatedTypeRpaType (OperatedTypeRpaTypeLike (..))
import ReOC.Name.OperationalExperienceHasOperationalExperience (OperationalExperienceHasOperationalExperienceLike (..))
import ReOC.Name.OperationalExperienceOperationalExperienceIntent (OperationalExperienceOperationalExperienceIntentLike (..))
import ReOC.Name.OperationalExperienceOperationalExperienceNotApplicable (OperationalExperienceOperationalExperienceNotApplicableLike (..))
import ReOC.Name.OperationalHeadquartersAtRegisteredOffice (OperationalHeadquartersAtRegisteredOfficeLike (..))
import ReOC.Name.OperationalHeadquartersOperationalHeadquartersAddress (OperationalHeadquartersOperationalHeadquartersAddressLike (..))
import ReOC.Name.OperationsManualCrew (OperationsManualCrewLike (..))
import ReOC.Name.OperationsManualFirstIssue (OperationsManualFirstIssueLike (..))
import ReOC.Name.OperationsManualPilots (OperationsManualPilotsLike (..))
import ReOC.Name.OperationsManualPolicies (OperationsManualPoliciesLike (..))
import ReOC.Name.OperationsManualRevisions (OperationsManualRevisionsLike (..))
import ReOC.Name.OperationsManualRiskRegister (OperationsManualRiskRegisterLike (..))
import ReOC.Name.OperationsManualServices (OperationsManualServicesLike (..))
import ReOC.Name.OperatorCompany (OperatorCompanyLike (..))
import ReOC.Name.OperatorFleet (OperatorFleetLike (..))
import ReOC.Name.OperatorKeyPersonnel (OperatorKeyPersonnelLike (..))
import ReOC.Name.OtherReOCRolesNoOtherReOCRoles (OtherReOCRolesNoOtherReOCRolesLike (..))
import ReOC.Name.OtherReOCRolesOtherReOCRolesHeld (OtherReOCRolesOtherReOCRolesHeldLike (..))
import ReOC.Name.PersonArn (PersonArnLike (..))
import ReOC.Name.PersonEmailAddress (PersonEmailAddressLike (..))
import ReOC.Name.PersonFullName (PersonFullNameLike (..))
import ReOC.Name.PersonPhoneNumber (PersonPhoneNumberLike (..))
import ReOC.Name.PersonnelHistoryActionTaken (PersonnelHistoryActionTakenLike (..))
import ReOC.Name.PersonnelHistoryCriminalConviction (PersonnelHistoryCriminalConvictionLike (..))
import ReOC.Name.PersonnelHistorySuspensionPending (PersonnelHistorySuspensionPendingLike (..))
import ReOC.Name.PersonnelHistoryTransportLicenceRefused (PersonnelHistoryTransportLicenceRefusedLike (..))
import ReOC.Name.PoliciesAlcoholHours (PoliciesAlcoholHoursLike (..))
import ReOC.Name.PoliciesBackupFrequency (PoliciesBackupFrequencyLike (..))
import ReOC.Name.PoliciesBatteryReserve (PoliciesBatteryReserveLike (..))
import ReOC.Name.PoliciesCheckingMonths (PoliciesCheckingMonthsLike (..))
import ReOC.Name.PoliciesDutyHours (PoliciesDutyHoursLike (..))
import ReOC.Name.PoliciesIndependentReviewYears (PoliciesIndependentReviewYearsLike (..))
import ReOC.Name.PoliciesInspectionHours (PoliciesInspectionHoursLike (..))
import ReOC.Name.PoliciesInspectionMonths (PoliciesInspectionMonthsLike (..))
import ReOC.Name.PoliciesRecencyDays (PoliciesRecencyDaysLike (..))
import ReOC.Name.PoliciesRecencyFlights (PoliciesRecencyFlightsLike (..))
import ReOC.Name.PoliciesRefresherMonths (PoliciesRefresherMonthsLike (..))
import ReOC.Name.PoliciesRestHours (PoliciesRestHoursLike (..))
import ReOC.Name.PrimaryContactApplicantIsPrimaryContact (PrimaryContactApplicantIsPrimaryContactLike (..))
import ReOC.Name.PrimaryContactPrimaryContactPerson (PrimaryContactPrimaryContactPersonLike (..))
import ReOC.Name.ReOCApplicationForm (ReOCApplicationFormLike (..))
import ReOC.Name.ReOCMaybeTrainingMaterial (ReOCMaybeTrainingMaterialLike (..))
import ReOC.Name.ReOCOperationsManual (ReOCOperationsManualLike (..))
import ReOC.Name.ReOCOperator (ReOCOperatorLike (..))
import ReOC.Name.RePLHoldingHoldsRePLForEachType (RePLHoldingHoldsRePLForEachTypeLike (..))
import ReOC.Name.RePLHoldingRePLHoldingIntent (RePLHoldingRePLHoldingIntentLike (..))
import ReOC.Name.RePLOriginPplTheory (RePLOriginPplTheoryLike (..))
import ReOC.Name.RePLOriginRePLTrainingOrganisation (RePLOriginRePLTrainingOrganisationLike (..))
import ReOC.Name.RegulatoryActionActionDate (RegulatoryActionActionDateLike (..))
import ReOC.Name.RegulatoryActionActionDetails (RegulatoryActionActionDetailsLike (..))
import ReOC.Name.RegulatoryActionAuthorisationAction (RegulatoryActionAuthorisationActionLike (..))
import ReOC.Name.RegulatoryActionReocSuspendedOrCancelled (RegulatoryActionReocSuspendedOrCancelledLike (..))
import ReOC.Name.RegulatoryActionTypeOfAction (RegulatoryActionTypeOfActionLike (..))
import ReOC.Name.RegulatoryHistoryNoRegulatoryAction (RegulatoryHistoryNoRegulatoryActionLike (..))
import ReOC.Name.RegulatoryHistoryRegulatoryActionTaken (RegulatoryHistoryRegulatoryActionTakenLike (..))
import ReOC.Name.RevisionDetails (RevisionDetailsLike (..))
import ReOC.Name.RevisionEffective (RevisionEffectiveLike (..))
import ReOC.Name.RevisionMonthsAfter (RevisionMonthsAfterLike (..))
import ReOC.Name.RevisionParts (RevisionPartsLike (..))
import ReOC.Name.RevisionVersionIncrement (RevisionVersionIncrementLike (..))
import ReOC.Name.RiskAdditionalControls (RiskAdditionalControlsLike (..))
import ReOC.Name.RiskAssessmentRiskConsequence (RiskAssessmentRiskConsequenceLike (..))
import ReOC.Name.RiskAssessmentRiskLikelihood (RiskAssessmentRiskLikelihoodLike (..))
import ReOC.Name.RiskDateEntered (RiskDateEnteredLike (..))
import ReOC.Name.RiskExistingControls (RiskExistingControlsLike (..))
import ReOC.Name.RiskHazard (RiskHazardLike (..))
import ReOC.Name.RiskInitialRisk (RiskInitialRiskLike (..))
import ReOC.Name.RiskResidualRisk (RiskResidualRiskLike (..))
import ReOC.Name.RiskReviewMonths (RiskReviewMonthsLike (..))
import ReOC.Name.RiskRiskDescription (RiskRiskDescriptionLike (..))
import ReOC.Name.RiskRiskOwner (RiskRiskOwnerLike (..))
import ReOC.Name.RpaTypeBatteryWarnings (RpaTypeBatteryWarningsLike (..))
import ReOC.Name.RpaTypeBeforeFlight (RpaTypeBeforeFlightLike (..))
import ReOC.Name.RpaTypeCategory (RpaTypeCategoryLike (..))
import ReOC.Name.RpaTypeEmergencyActions (RpaTypeEmergencyActionsLike (..))
import ReOC.Name.RpaTypeFlightTermination (RpaTypeFlightTerminationLike (..))
import ReOC.Name.RpaTypeInspectionItems (RpaTypeInspectionItemsLike (..))
import ReOC.Name.RpaTypeMaximumGrossWeight (RpaTypeMaximumGrossWeightLike (..))
import ReOC.Name.RpaTypeRpaMake (RpaTypeRpaMakeLike (..))
import ReOC.Name.RpaTypeRpaModel (RpaTypeRpaModelLike (..))
import ReOC.Name.RpaTypeShortName (RpaTypeShortNameLike (..))
import ReOC.Name.RpaTypeTransponderCarriage (RpaTypeTransponderCarriageLike (..))
import ReOC.Name.RpaTypeUserManual (RpaTypeUserManualLike (..))
import ReOC.Name.StepIndex (StepIndexLike (..))
import ReOC.Name.TeachingQualificationTeachingQualificationHeld (TeachingQualificationTeachingQualificationHeldLike (..))
import ReOC.Name.TeachingQualificationTeachingQualificationIntent (TeachingQualificationTeachingQualificationIntentLike (..))
import ReOC.Name.TrainingArrangementsExam (TrainingArrangementsExamLike (..))
import ReOC.Name.TrainingArrangementsExamPassMark (TrainingArrangementsExamPassMarkLike (..))
import ReOC.Name.TrainingArrangementsExaminer (TrainingArrangementsExaminerLike (..))
import ReOC.Name.TrainingArrangementsMaxStudentsPerCourse (TrainingArrangementsMaxStudentsPerCourseLike (..))
import ReOC.Name.TrainingArrangementsMaxStudentsPerInstructor (TrainingArrangementsMaxStudentsPerInstructorLike (..))
import ReOC.Name.TrainingArrangementsPracticalAreas (TrainingArrangementsPracticalAreasLike (..))
import ReOC.Name.TrainingArrangementsSimulator (TrainingArrangementsSimulatorLike (..))
import ReOC.Name.TrainingArrangementsTakeover (TrainingArrangementsTakeoverLike (..))
import ReOC.Name.TrainingArrangementsTheory (TrainingArrangementsTheoryLike (..))
import ReOC.Name.TrainingArrangementsTheoryVenues (TrainingArrangementsTheoryVenuesLike (..))
import ReOC.Name.TrainingCourseComplexities (TrainingCourseComplexitiesLike (..))
import ReOC.Name.TrainingCourseCourseKind (TrainingCourseCourseKindLike (..))
import ReOC.Name.TrainingCourseTrainingRPA (TrainingCourseTrainingRPALike (..))
import ReOC.Name.TrainingMaterialCriNominee (TrainingMaterialCriNomineeLike (..))
import ReOC.Name.TrainingMaterialCriOtherReOCRoles (TrainingMaterialCriOtherReOCRolesLike (..))
import ReOC.Name.TrainingMaterialOperationalExperience (TrainingMaterialOperationalExperienceLike (..))
import ReOC.Name.TrainingMaterialRePLHolding (TrainingMaterialRePLHoldingLike (..))
import ReOC.Name.TrainingMaterialTeachingQualification (TrainingMaterialTeachingQualificationLike (..))
import ReOC.Name.TrainingMaterialTrainingArrangements (TrainingMaterialTrainingArrangementsLike (..))
import ReOC.Name.TrainingMaterialTrainingCourses (TrainingMaterialTrainingCoursesLike (..))
import ReOC.Name.VersionMajorVersion (VersionMajorVersionLike (..))
import ReOC.Name.VersionMinorVersion (VersionMinorVersionLike (..))
import ReOC.Name.WrittenSignatureWrittenSignatureFile (WrittenSignatureWrittenSignatureFileLike (..))
import ReOC.Name.WrittenSignatureWrittenSignatureImage (WrittenSignatureWrittenSignatureImageLike (..))

-- | A step of the path from the whole form to a field: a field or constructor, or the index of an element of a list.
data Step
  = StepField Field
  | StepIndex Natural
  deriving (Eq, Ord, Show)

-- | The name of the data type @Step@.
class StepLike p f x x' where
  step ::
    Optic p f x x' Step Step

-- | Identity
instance (x' ~ Step) => StepLike p f Step x' where
  step = id

-- | Prism
instance (Choice p, Applicative f, x' ~ Step) => FieldLike p f Step x' where
  field = prism' StepField (\case StepField x -> Just x; StepIndex _ -> Nothing)

-- | Prism
instance (Choice p, Applicative f, x' ~ Step) => StepIndexLike p f Step x' where
  stepIndex = prism' StepIndex (\case StepField _ -> Nothing; StepIndex x -> Just x)

-- | Prism: through @field@, then @personFullName@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PersonFullNameLike p f Step x' where
  personFullName = field . personFullName

-- | Prism: through @field@, then @personArn@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PersonArnLike p f Step x' where
  personArn = field . personArn

-- | Prism: through @field@, then @personPhoneNumber@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PersonPhoneNumberLike p f Step x' where
  personPhoneNumber = field . personPhoneNumber

-- | Prism: through @field@, then @personEmailAddress@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PersonEmailAddressLike p f Step x' where
  personEmailAddress = field . personEmailAddress

-- | Prism: through @field@, then @addressStreetAddress@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => AddressStreetAddressLike p f Step x' where
  addressStreetAddress = field . addressStreetAddress

-- | Prism: through @field@, then @addressSuburb@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => AddressSuburbLike p f Step x' where
  addressSuburb = field . addressSuburb

-- | Prism: through @field@, then @addressStateOrTerritory@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => AddressStateOrTerritoryLike p f Step x' where
  addressStateOrTerritory = field . addressStateOrTerritory

-- | Prism: through @field@, then @addressPostcode@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => AddressPostcodeLike p f Step x' where
  addressPostcode = field . addressPostcode

-- | Prism: through @field@, then @operationalHeadquartersAtRegisteredOffice@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationalHeadquartersAtRegisteredOfficeLike p f Step x' where
  operationalHeadquartersAtRegisteredOffice = field . operationalHeadquartersAtRegisteredOffice

-- | Prism: through @field@, then @operationalHeadquartersOperationalHeadquartersAddress@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationalHeadquartersOperationalHeadquartersAddressLike p f Step x' where
  operationalHeadquartersOperationalHeadquartersAddress = field . operationalHeadquartersOperationalHeadquartersAddress

-- | Prism: through @field@, then @companyCompanyName@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CompanyCompanyNameLike p f Step x' where
  companyCompanyName = field . companyCompanyName

-- | Prism: through @field@, then @companyAbn@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CompanyAbnLike p f Step x' where
  companyAbn = field . companyAbn

-- | Prism: through @field@, then @companyArn@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CompanyArnLike p f Step x' where
  companyArn = field . companyArn

-- | Prism: through @field@, then @companyRegisteredOffice@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CompanyRegisteredOfficeLike p f Step x' where
  companyRegisteredOffice = field . companyRegisteredOffice

-- | Prism: through @field@, then @companyOperationalHeadquarters@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CompanyOperationalHeadquartersLike p f Step x' where
  companyOperationalHeadquarters = field . companyOperationalHeadquarters

-- | Prism: through @field@, then @companyPhoneNumber@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CompanyPhoneNumberLike p f Step x' where
  companyPhoneNumber = field . companyPhoneNumber

-- | Prism: through @field@, then @companyEmailAddress@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CompanyEmailAddressLike p f Step x' where
  companyEmailAddress = field . companyEmailAddress

-- | Prism: through @field@, then @companyBusinessName@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CompanyBusinessNameLike p f Step x' where
  companyBusinessName = field . companyBusinessName

-- | Prism: through @field@, then @flightTerminationNoFlightTerminationSystem@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => FlightTerminationNoFlightTerminationSystemLike p f Step x' where
  flightTerminationNoFlightTerminationSystem = field . flightTerminationNoFlightTerminationSystem

-- | Prism: through @field@, then @flightTerminationFlightTerminationSystem@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => FlightTerminationFlightTerminationSystemLike p f Step x' where
  flightTerminationFlightTerminationSystem = field . flightTerminationFlightTerminationSystem

-- | Prism: through @field@, then @emergencyActionSituation@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => EmergencyActionSituationLike p f Step x' where
  emergencyActionSituation = field . emergencyActionSituation

-- | Prism: through @field@, then @emergencyActionResponse@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => EmergencyActionResponseLike p f Step x' where
  emergencyActionResponse = field . emergencyActionResponse

-- | Prism: through @field@, then @emergencyActionActionSteps@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => EmergencyActionActionStepsLike p f Step x' where
  emergencyActionActionSteps = field . emergencyActionActionSteps

-- | Prism: through @field@, then @rpaTypeRpaMake@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeRpaMakeLike p f Step x' where
  rpaTypeRpaMake = field . rpaTypeRpaMake

-- | Prism: through @field@, then @rpaTypeRpaModel@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeRpaModelLike p f Step x' where
  rpaTypeRpaModel = field . rpaTypeRpaModel

-- | Prism: through @field@, then @rpaTypeShortName@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeShortNameLike p f Step x' where
  rpaTypeShortName = field . rpaTypeShortName

-- | Prism: through @field@, then @rpaTypeCategory@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeCategoryLike p f Step x' where
  rpaTypeCategory = field . rpaTypeCategory

-- | Prism: through @field@, then @rpaTypeMaximumGrossWeight@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeMaximumGrossWeightLike p f Step x' where
  rpaTypeMaximumGrossWeight = field . rpaTypeMaximumGrossWeight

-- | Prism: through @field@, then @rpaTypeUserManual@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeUserManualLike p f Step x' where
  rpaTypeUserManual = field . rpaTypeUserManual

-- | Prism: through @field@, then @rpaTypeTransponderCarriage@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeTransponderCarriageLike p f Step x' where
  rpaTypeTransponderCarriage = field . rpaTypeTransponderCarriage

-- | Prism: through @field@, then @rpaTypeFlightTermination@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeFlightTerminationLike p f Step x' where
  rpaTypeFlightTermination = field . rpaTypeFlightTermination

-- | Prism: through @field@, then @rpaTypeInspectionItems@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeInspectionItemsLike p f Step x' where
  rpaTypeInspectionItems = field . rpaTypeInspectionItems

-- | Prism: through @field@, then @rpaTypeBeforeFlight@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeBeforeFlightLike p f Step x' where
  rpaTypeBeforeFlight = field . rpaTypeBeforeFlight

-- | Prism: through @field@, then @rpaTypeBatteryWarnings@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeBatteryWarningsLike p f Step x' where
  rpaTypeBatteryWarnings = field . rpaTypeBatteryWarnings

-- | Prism: through @field@, then @rpaTypeEmergencyActions@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RpaTypeEmergencyActionsLike p f Step x' where
  rpaTypeEmergencyActions = field . rpaTypeEmergencyActions

-- | Prism: through @field@, then @equipmentEquipmentDescription@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => EquipmentEquipmentDescriptionLike p f Step x' where
  equipmentEquipmentDescription = field . equipmentEquipmentDescription

-- | Prism: through @field@, then @equipmentSerialNumber@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => EquipmentSerialNumberLike p f Step x' where
  equipmentSerialNumber = field . equipmentSerialNumber

-- | Prism: through @field@, then @aircraftSerialNumber@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => AircraftSerialNumberLike p f Step x' where
  aircraftSerialNumber = field . aircraftSerialNumber

-- | Prism: through @field@, then @aircraftAssociatedEquipment@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => AircraftAssociatedEquipmentLike p f Step x' where
  aircraftAssociatedEquipment = field . aircraftAssociatedEquipment

-- | Prism: through @field@, then @operatedTypeRpaType@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperatedTypeRpaTypeLike p f Step x' where
  operatedTypeRpaType = field . operatedTypeRpaType

-- | Prism: through @field@, then @operatedTypeAirframes@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperatedTypeAirframesLike p f Step x' where
  operatedTypeAirframes = field . operatedTypeAirframes

-- | Prism: through @field@, then @rePLOriginPplTheory@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RePLOriginPplTheoryLike p f Step x' where
  rePLOriginPplTheory = field . rePLOriginPplTheory

-- | Prism: through @field@, then @rePLOriginRePLTrainingOrganisation@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RePLOriginRePLTrainingOrganisationLike p f Step x' where
  rePLOriginRePLTrainingOrganisation = field . rePLOriginRePLTrainingOrganisation

-- | Prism: through @field@, then @otherReOCRolesNoOtherReOCRoles@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OtherReOCRolesNoOtherReOCRolesLike p f Step x' where
  otherReOCRolesNoOtherReOCRoles = field . otherReOCRolesNoOtherReOCRoles

-- | Prism: through @field@, then @otherReOCRolesOtherReOCRolesHeld@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OtherReOCRolesOtherReOCRolesHeldLike p f Step x' where
  otherReOCRolesOtherReOCRolesHeld = field . otherReOCRolesOtherReOCRolesHeld

-- | Prism: through @field@, then @nomineePerson@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => NomineePersonLike p f Step x' where
  nomineePerson = field . nomineePerson

-- | Prism: through @field@, then @nomineeOtherQualifications@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => NomineeOtherQualificationsLike p f Step x' where
  nomineeOtherQualifications = field . nomineeOtherQualifications

-- | Prism: through @field@, then @nomineeAviationExperience@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => NomineeAviationExperienceLike p f Step x' where
  nomineeAviationExperience = field . nomineeAviationExperience

-- | Prism: through @field@, then @chiefExecutiveNominee@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ChiefExecutiveNomineeLike p f Step x' where
  chiefExecutiveNominee = field . chiefExecutiveNominee

-- | Prism: through @field@, then @chiefExecutiveDirectorStatus@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ChiefExecutiveDirectorStatusLike p f Step x' where
  chiefExecutiveDirectorStatus = field . chiefExecutiveDirectorStatus

-- | Prism: through @field@, then @chiefExecutiveManagementExperience@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ChiefExecutiveManagementExperienceLike p f Step x' where
  chiefExecutiveManagementExperience = field . chiefExecutiveManagementExperience

-- | Prism: through @field@, then @crpNomineeCrpIsCEO@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CrpNomineeCrpIsCEOLike p f Step x' where
  crpNomineeCrpIsCEO = field . crpNomineeCrpIsCEO

-- | Prism: through @field@, then @crpNomineeCrpNominated@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CrpNomineeCrpNominatedLike p f Step x' where
  crpNomineeCrpNominated = field . crpNomineeCrpNominated

-- | Prism: through @field@, then @chiefPilotCrpNominee@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ChiefPilotCrpNomineeLike p f Step x' where
  chiefPilotCrpNominee = field . chiefPilotCrpNominee

-- | Prism: through @field@, then @chiefPilotRePLOrigin@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ChiefPilotRePLOriginLike p f Step x' where
  chiefPilotRePLOrigin = field . chiefPilotRePLOrigin

-- | Prism: through @field@, then @chiefPilotRpaHistory@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ChiefPilotRpaHistoryLike p f Step x' where
  chiefPilotRpaHistory = field . chiefPilotRpaHistory

-- | Prism: through @field@, then @chiefPilotOtherReOCRoles@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ChiefPilotOtherReOCRolesLike p f Step x' where
  chiefPilotOtherReOCRoles = field . chiefPilotOtherReOCRoles

-- | Prism: through @field@, then @chiefPilotRadio@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ChiefPilotRadioLike p f Step x' where
  chiefPilotRadio = field . chiefPilotRadio

-- | Prism: through @field@, then @mcNomineeMcIsCEO@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => McNomineeMcIsCEOLike p f Step x' where
  mcNomineeMcIsCEO = field . mcNomineeMcIsCEO

-- | Prism: through @field@, then @mcNomineeMcIsCRP@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => McNomineeMcIsCRPLike p f Step x' where
  mcNomineeMcIsCRP = field . mcNomineeMcIsCRP

-- | Prism: through @field@, then @mcNomineeMcNominated@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => McNomineeMcNominatedLike p f Step x' where
  mcNomineeMcNominated = field . mcNomineeMcNominated

-- | Prism: through @field@, then @keyPersonnelChiefExecutive@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => KeyPersonnelChiefExecutiveLike p f Step x' where
  keyPersonnelChiefExecutive = field . keyPersonnelChiefExecutive

-- | Prism: through @field@, then @keyPersonnelChiefPilot@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => KeyPersonnelChiefPilotLike p f Step x' where
  keyPersonnelChiefPilot = field . keyPersonnelChiefPilot

-- | Prism: through @field@, then @keyPersonnelMcNominee@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => KeyPersonnelMcNomineeLike p f Step x' where
  keyPersonnelMcNominee = field . keyPersonnelMcNominee

-- | Prism: through @field@, then @operatorCompany@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperatorCompanyLike p f Step x' where
  operatorCompany = field . operatorCompany

-- | Prism: through @field@, then @operatorKeyPersonnel@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperatorKeyPersonnelLike p f Step x' where
  operatorKeyPersonnel = field . operatorKeyPersonnel

-- | Prism: through @field@, then @operatorFleet@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperatorFleetLike p f Step x' where
  operatorFleet = field . operatorFleet

-- | Prism: through @field@, then @contactPersonFullName@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ContactPersonFullNameLike p f Step x' where
  contactPersonFullName = field . contactPersonFullName

-- | Prism: through @field@, then @contactPersonPosition@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ContactPersonPositionLike p f Step x' where
  contactPersonPosition = field . contactPersonPosition

-- | Prism: through @field@, then @contactPersonPhoneNumber@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ContactPersonPhoneNumberLike p f Step x' where
  contactPersonPhoneNumber = field . contactPersonPhoneNumber

-- | Prism: through @field@, then @contactPersonEmailAddress@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ContactPersonEmailAddressLike p f Step x' where
  contactPersonEmailAddress = field . contactPersonEmailAddress

-- | Prism: through @field@, then @primaryContactApplicantIsPrimaryContact@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PrimaryContactApplicantIsPrimaryContactLike p f Step x' where
  primaryContactApplicantIsPrimaryContact = field . primaryContactApplicantIsPrimaryContact

-- | Prism: through @field@, then @primaryContactPrimaryContactPerson@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PrimaryContactPrimaryContactPersonLike p f Step x' where
  primaryContactPrimaryContactPerson = field . primaryContactPrimaryContactPerson

-- | Prism: through @field@, then @historyAnswerNoHistory@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => HistoryAnswerNoHistoryLike p f Step x' where
  historyAnswerNoHistory = field . historyAnswerNoHistory

-- | Prism: through @field@, then @historyAnswerHistoryDisclosed@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => HistoryAnswerHistoryDisclosedLike p f Step x' where
  historyAnswerHistoryDisclosed = field . historyAnswerHistoryDisclosed

-- | Prism: through @field@, then @personnelHistoryActionTaken@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PersonnelHistoryActionTakenLike p f Step x' where
  personnelHistoryActionTaken = field . personnelHistoryActionTaken

-- | Prism: through @field@, then @personnelHistoryTransportLicenceRefused@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PersonnelHistoryTransportLicenceRefusedLike p f Step x' where
  personnelHistoryTransportLicenceRefused = field . personnelHistoryTransportLicenceRefused

-- | Prism: through @field@, then @personnelHistoryCriminalConviction@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PersonnelHistoryCriminalConvictionLike p f Step x' where
  personnelHistoryCriminalConviction = field . personnelHistoryCriminalConviction

-- | Prism: through @field@, then @personnelHistorySuspensionPending@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PersonnelHistorySuspensionPendingLike p f Step x' where
  personnelHistorySuspensionPending = field . personnelHistorySuspensionPending

-- | Prism: through @field@, then @regulatoryActionReocSuspendedOrCancelled@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RegulatoryActionReocSuspendedOrCancelledLike p f Step x' where
  regulatoryActionReocSuspendedOrCancelled = field . regulatoryActionReocSuspendedOrCancelled

-- | Prism: through @field@, then @regulatoryActionTypeOfAction@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RegulatoryActionTypeOfActionLike p f Step x' where
  regulatoryActionTypeOfAction = field . regulatoryActionTypeOfAction

-- | Prism: through @field@, then @regulatoryActionAuthorisationAction@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RegulatoryActionAuthorisationActionLike p f Step x' where
  regulatoryActionAuthorisationAction = field . regulatoryActionAuthorisationAction

-- | Prism: through @field@, then @regulatoryActionActionDate@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RegulatoryActionActionDateLike p f Step x' where
  regulatoryActionActionDate = field . regulatoryActionActionDate

-- | Prism: through @field@, then @regulatoryActionActionDetails@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RegulatoryActionActionDetailsLike p f Step x' where
  regulatoryActionActionDetails = field . regulatoryActionActionDetails

-- | Prism: through @field@, then @regulatoryHistoryNoRegulatoryAction@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RegulatoryHistoryNoRegulatoryActionLike p f Step x' where
  regulatoryHistoryNoRegulatoryAction = field . regulatoryHistoryNoRegulatoryAction

-- | Prism: through @field@, then @regulatoryHistoryRegulatoryActionTaken@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RegulatoryHistoryRegulatoryActionTakenLike p f Step x' where
  regulatoryHistoryRegulatoryActionTaken = field . regulatoryHistoryRegulatoryActionTaken

-- | Prism: through @field@, then @declarantFullName@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => DeclarantFullNameLike p f Step x' where
  declarantFullName = field . declarantFullName

-- | Prism: through @field@, then @declarantRole@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => DeclarantRoleLike p f Step x' where
  declarantRole = field . declarantRole

-- | Prism: through @field@, then @declarationDeclaredByCEO@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => DeclarationDeclaredByCEOLike p f Step x' where
  declarationDeclaredByCEO = field . declarationDeclaredByCEO

-- | Prism: through @field@, then @declarationDeclaredByResponsibleManager@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => DeclarationDeclaredByResponsibleManagerLike p f Step x' where
  declarationDeclaredByResponsibleManager = field . declarationDeclaredByResponsibleManager

-- | Prism: through @field@, then @declarationDeclaredByAgent@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => DeclarationDeclaredByAgentLike p f Step x' where
  declarationDeclaredByAgent = field . declarationDeclaredByAgent

-- | Prism: through @field@, then @declarationDeclaredByOther@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => DeclarationDeclaredByOtherLike p f Step x' where
  declarationDeclaredByOther = field . declarationDeclaredByOther

-- | Prism: through @field@, then @writtenSignatureWrittenSignatureImage@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => WrittenSignatureWrittenSignatureImageLike p f Step x' where
  writtenSignatureWrittenSignatureImage = field . writtenSignatureWrittenSignatureImage

-- | Prism: through @field@, then @writtenSignatureWrittenSignatureFile@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => WrittenSignatureWrittenSignatureFileLike p f Step x' where
  writtenSignatureWrittenSignatureFile = field . writtenSignatureWrittenSignatureFile

-- | Prism: through @field@, then @applicationFormPrimaryContact@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ApplicationFormPrimaryContactLike p f Step x' where
  applicationFormPrimaryContact = field . applicationFormPrimaryContact

-- | Prism: through @field@, then @applicationFormPersonnelHistory@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ApplicationFormPersonnelHistoryLike p f Step x' where
  applicationFormPersonnelHistory = field . applicationFormPersonnelHistory

-- | Prism: through @field@, then @applicationFormRegulatoryHistory@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ApplicationFormRegulatoryHistoryLike p f Step x' where
  applicationFormRegulatoryHistory = field . applicationFormRegulatoryHistory

-- | Prism: through @field@, then @applicationFormProceduresLibrary@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ApplicationFormProceduresLibraryLike p f Step x' where
  applicationFormProceduresLibrary = field . applicationFormProceduresLibrary

-- | Prism: through @field@, then @applicationFormOtherDocuments@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ApplicationFormOtherDocumentsLike p f Step x' where
  applicationFormOtherDocuments = field . applicationFormOtherDocuments

-- | Prism: through @field@, then @applicationFormDeclaration@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ApplicationFormDeclarationLike p f Step x' where
  applicationFormDeclaration = field . applicationFormDeclaration

-- | Prism: through @field@, then @applicationFormSignature@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ApplicationFormSignatureLike p f Step x' where
  applicationFormSignature = field . applicationFormSignature

-- | Prism: through @field@, then @versionMajorVersion@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => VersionMajorVersionLike p f Step x' where
  versionMajorVersion = field . versionMajorVersion

-- | Prism: through @field@, then @versionMinorVersion@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => VersionMinorVersionLike p f Step x' where
  versionMinorVersion = field . versionMinorVersion

-- | Prism: through @field@, then @firstIssueVersion@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => FirstIssueVersionLike p f Step x' where
  firstIssueVersion = field . firstIssueVersion

-- | Prism: through @field@, then @firstIssueIssueDate@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => FirstIssueIssueDateLike p f Step x' where
  firstIssueIssueDate = field . firstIssueIssueDate

-- | Prism: through @field@, then @firstIssueEffective@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => FirstIssueEffectiveLike p f Step x' where
  firstIssueEffective = field . firstIssueEffective

-- | Prism: through @field@, then @firstIssueParts@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => FirstIssuePartsLike p f Step x' where
  firstIssueParts = field . firstIssueParts

-- | Prism: through @field@, then @firstIssueDetails@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => FirstIssueDetailsLike p f Step x' where
  firstIssueDetails = field . firstIssueDetails

-- | Prism: through @field@, then @revisionVersionIncrement@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RevisionVersionIncrementLike p f Step x' where
  revisionVersionIncrement = field . revisionVersionIncrement

-- | Prism: through @field@, then @revisionMonthsAfter@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RevisionMonthsAfterLike p f Step x' where
  revisionMonthsAfter = field . revisionMonthsAfter

-- | Prism: through @field@, then @revisionEffective@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RevisionEffectiveLike p f Step x' where
  revisionEffective = field . revisionEffective

-- | Prism: through @field@, then @revisionParts@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RevisionPartsLike p f Step x' where
  revisionParts = field . revisionParts

-- | Prism: through @field@, then @revisionDetails@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RevisionDetailsLike p f Step x' where
  revisionDetails = field . revisionDetails

-- | Prism: through @field@, then @policiesRecencyFlights@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesRecencyFlightsLike p f Step x' where
  policiesRecencyFlights = field . policiesRecencyFlights

-- | Prism: through @field@, then @policiesRecencyDays@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesRecencyDaysLike p f Step x' where
  policiesRecencyDays = field . policiesRecencyDays

-- | Prism: through @field@, then @policiesRefresherMonths@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesRefresherMonthsLike p f Step x' where
  policiesRefresherMonths = field . policiesRefresherMonths

-- | Prism: through @field@, then @policiesAlcoholHours@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesAlcoholHoursLike p f Step x' where
  policiesAlcoholHours = field . policiesAlcoholHours

-- | Prism: through @field@, then @policiesRestHours@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesRestHoursLike p f Step x' where
  policiesRestHours = field . policiesRestHours

-- | Prism: through @field@, then @policiesDutyHours@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesDutyHoursLike p f Step x' where
  policiesDutyHours = field . policiesDutyHours

-- | Prism: through @field@, then @policiesInspectionMonths@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesInspectionMonthsLike p f Step x' where
  policiesInspectionMonths = field . policiesInspectionMonths

-- | Prism: through @field@, then @policiesInspectionHours@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesInspectionHoursLike p f Step x' where
  policiesInspectionHours = field . policiesInspectionHours

-- | Prism: through @field@, then @policiesBatteryReserve@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesBatteryReserveLike p f Step x' where
  policiesBatteryReserve = field . policiesBatteryReserve

-- | Prism: through @field@, then @policiesBackupFrequency@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesBackupFrequencyLike p f Step x' where
  policiesBackupFrequency = field . policiesBackupFrequency

-- | Prism: through @field@, then @policiesIndependentReviewYears@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesIndependentReviewYearsLike p f Step x' where
  policiesIndependentReviewYears = field . policiesIndependentReviewYears

-- | Prism: through @field@, then @policiesCheckingMonths@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => PoliciesCheckingMonthsLike p f Step x' where
  policiesCheckingMonths = field . policiesCheckingMonths

-- | Prism: through @field@, then @riskAssessmentRiskLikelihood@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskAssessmentRiskLikelihoodLike p f Step x' where
  riskAssessmentRiskLikelihood = field . riskAssessmentRiskLikelihood

-- | Prism: through @field@, then @riskAssessmentRiskConsequence@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskAssessmentRiskConsequenceLike p f Step x' where
  riskAssessmentRiskConsequence = field . riskAssessmentRiskConsequence

-- | Prism: through @field@, then @riskHazard@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskHazardLike p f Step x' where
  riskHazard = field . riskHazard

-- | Prism: through @field@, then @riskRiskDescription@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskRiskDescriptionLike p f Step x' where
  riskRiskDescription = field . riskRiskDescription

-- | Prism: through @field@, then @riskExistingControls@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskExistingControlsLike p f Step x' where
  riskExistingControls = field . riskExistingControls

-- | Prism: through @field@, then @riskInitialRisk@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskInitialRiskLike p f Step x' where
  riskInitialRisk = field . riskInitialRisk

-- | Prism: through @field@, then @riskAdditionalControls@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskAdditionalControlsLike p f Step x' where
  riskAdditionalControls = field . riskAdditionalControls

-- | Prism: through @field@, then @riskResidualRisk@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskResidualRiskLike p f Step x' where
  riskResidualRisk = field . riskResidualRisk

-- | Prism: through @field@, then @riskRiskOwner@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskRiskOwnerLike p f Step x' where
  riskRiskOwner = field . riskRiskOwner

-- | Prism: through @field@, then @riskDateEntered@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskDateEnteredLike p f Step x' where
  riskDateEntered = field . riskDateEntered

-- | Prism: through @field@, then @riskReviewMonths@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RiskReviewMonthsLike p f Step x' where
  riskReviewMonths = field . riskReviewMonths

-- | Prism: through @field@, then @operationsManualFirstIssue@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationsManualFirstIssueLike p f Step x' where
  operationsManualFirstIssue = field . operationsManualFirstIssue

-- | Prism: through @field@, then @operationsManualRevisions@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationsManualRevisionsLike p f Step x' where
  operationsManualRevisions = field . operationsManualRevisions

-- | Prism: through @field@, then @operationsManualServices@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationsManualServicesLike p f Step x' where
  operationsManualServices = field . operationsManualServices

-- | Prism: through @field@, then @operationsManualPolicies@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationsManualPoliciesLike p f Step x' where
  operationsManualPolicies = field . operationsManualPolicies

-- | Prism: through @field@, then @operationsManualRiskRegister@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationsManualRiskRegisterLike p f Step x' where
  operationsManualRiskRegister = field . operationsManualRiskRegister

-- | Prism: through @field@, then @operationsManualCrew@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationsManualCrewLike p f Step x' where
  operationsManualCrew = field . operationsManualCrew

-- | Prism: through @field@, then @operationsManualPilots@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationsManualPilotsLike p f Step x' where
  operationsManualPilots = field . operationsManualPilots

-- | Prism: through @field@, then @criNomineeCriIsCEO@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CriNomineeCriIsCEOLike p f Step x' where
  criNomineeCriIsCEO = field . criNomineeCriIsCEO

-- | Prism: through @field@, then @criNomineeCriIsCRP@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CriNomineeCriIsCRPLike p f Step x' where
  criNomineeCriIsCRP = field . criNomineeCriIsCRP

-- | Prism: through @field@, then @criNomineeCriIsMC@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CriNomineeCriIsMCLike p f Step x' where
  criNomineeCriIsMC = field . criNomineeCriIsMC

-- | Prism: through @field@, then @criNomineeCriNominated@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => CriNomineeCriNominatedLike p f Step x' where
  criNomineeCriNominated = field . criNomineeCriNominated

-- | Prism: through @field@, then @rePLHoldingHoldsRePLForEachType@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RePLHoldingHoldsRePLForEachTypeLike p f Step x' where
  rePLHoldingHoldsRePLForEachType = field . rePLHoldingHoldsRePLForEachType

-- | Prism: through @field@, then @rePLHoldingRePLHoldingIntent@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => RePLHoldingRePLHoldingIntentLike p f Step x' where
  rePLHoldingRePLHoldingIntent = field . rePLHoldingRePLHoldingIntent

-- | Prism: through @field@, then @teachingQualificationTeachingQualificationHeld@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TeachingQualificationTeachingQualificationHeldLike p f Step x' where
  teachingQualificationTeachingQualificationHeld = field . teachingQualificationTeachingQualificationHeld

-- | Prism: through @field@, then @teachingQualificationTeachingQualificationIntent@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TeachingQualificationTeachingQualificationIntentLike p f Step x' where
  teachingQualificationTeachingQualificationIntent = field . teachingQualificationTeachingQualificationIntent

-- | Prism: through @field@, then @operationalExperienceHasOperationalExperience@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationalExperienceHasOperationalExperienceLike p f Step x' where
  operationalExperienceHasOperationalExperience = field . operationalExperienceHasOperationalExperience

-- | Prism: through @field@, then @operationalExperienceOperationalExperienceIntent@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationalExperienceOperationalExperienceIntentLike p f Step x' where
  operationalExperienceOperationalExperienceIntent = field . operationalExperienceOperationalExperienceIntent

-- | Prism: through @field@, then @operationalExperienceOperationalExperienceNotApplicable@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => OperationalExperienceOperationalExperienceNotApplicableLike p f Step x' where
  operationalExperienceOperationalExperienceNotApplicable = field . operationalExperienceOperationalExperienceNotApplicable

-- | Prism: through @field@, then @trainingCourseCourseKind@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingCourseCourseKindLike p f Step x' where
  trainingCourseCourseKind = field . trainingCourseCourseKind

-- | Prism: through @field@, then @trainingCourseTrainingRPA@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingCourseTrainingRPALike p f Step x' where
  trainingCourseTrainingRPA = field . trainingCourseTrainingRPA

-- | Prism: through @field@, then @trainingCourseComplexities@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingCourseComplexitiesLike p f Step x' where
  trainingCourseComplexities = field . trainingCourseComplexities

-- | Prism: through @field@, then @trainingArrangementsTheoryVenues@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingArrangementsTheoryVenuesLike p f Step x' where
  trainingArrangementsTheoryVenues = field . trainingArrangementsTheoryVenues

-- | Prism: through @field@, then @trainingArrangementsPracticalAreas@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingArrangementsPracticalAreasLike p f Step x' where
  trainingArrangementsPracticalAreas = field . trainingArrangementsPracticalAreas

-- | Prism: through @field@, then @trainingArrangementsMaxStudentsPerCourse@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingArrangementsMaxStudentsPerCourseLike p f Step x' where
  trainingArrangementsMaxStudentsPerCourse = field . trainingArrangementsMaxStudentsPerCourse

-- | Prism: through @field@, then @trainingArrangementsMaxStudentsPerInstructor@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingArrangementsMaxStudentsPerInstructorLike p f Step x' where
  trainingArrangementsMaxStudentsPerInstructor = field . trainingArrangementsMaxStudentsPerInstructor

-- | Prism: through @field@, then @trainingArrangementsTakeover@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingArrangementsTakeoverLike p f Step x' where
  trainingArrangementsTakeover = field . trainingArrangementsTakeover

-- | Prism: through @field@, then @trainingArrangementsTheory@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingArrangementsTheoryLike p f Step x' where
  trainingArrangementsTheory = field . trainingArrangementsTheory

-- | Prism: through @field@, then @trainingArrangementsExam@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingArrangementsExamLike p f Step x' where
  trainingArrangementsExam = field . trainingArrangementsExam

-- | Prism: through @field@, then @trainingArrangementsExamPassMark@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingArrangementsExamPassMarkLike p f Step x' where
  trainingArrangementsExamPassMark = field . trainingArrangementsExamPassMark

-- | Prism: through @field@, then @trainingArrangementsExaminer@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingArrangementsExaminerLike p f Step x' where
  trainingArrangementsExaminer = field . trainingArrangementsExaminer

-- | Prism: through @field@, then @trainingArrangementsSimulator@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingArrangementsSimulatorLike p f Step x' where
  trainingArrangementsSimulator = field . trainingArrangementsSimulator

-- | Prism: through @field@, then @trainingMaterialCriNominee@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingMaterialCriNomineeLike p f Step x' where
  trainingMaterialCriNominee = field . trainingMaterialCriNominee

-- | Prism: through @field@, then @trainingMaterialRePLHolding@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingMaterialRePLHoldingLike p f Step x' where
  trainingMaterialRePLHolding = field . trainingMaterialRePLHolding

-- | Prism: through @field@, then @trainingMaterialTeachingQualification@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingMaterialTeachingQualificationLike p f Step x' where
  trainingMaterialTeachingQualification = field . trainingMaterialTeachingQualification

-- | Prism: through @field@, then @trainingMaterialOperationalExperience@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingMaterialOperationalExperienceLike p f Step x' where
  trainingMaterialOperationalExperience = field . trainingMaterialOperationalExperience

-- | Prism: through @field@, then @trainingMaterialCriOtherReOCRoles@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingMaterialCriOtherReOCRolesLike p f Step x' where
  trainingMaterialCriOtherReOCRoles = field . trainingMaterialCriOtherReOCRoles

-- | Prism: through @field@, then @trainingMaterialTrainingCourses@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingMaterialTrainingCoursesLike p f Step x' where
  trainingMaterialTrainingCourses = field . trainingMaterialTrainingCourses

-- | Prism: through @field@, then @trainingMaterialTrainingArrangements@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => TrainingMaterialTrainingArrangementsLike p f Step x' where
  trainingMaterialTrainingArrangements = field . trainingMaterialTrainingArrangements

-- | Prism: through @field@, then @reOCOperator@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ReOCOperatorLike p f Step x' where
  reOCOperator = field . reOCOperator

-- | Prism: through @field@, then @reOCApplicationForm@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ReOCApplicationFormLike p f Step x' where
  reOCApplicationForm = field . reOCApplicationForm

-- | Prism: through @field@, then @reOCOperationsManual@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ReOCOperationsManualLike p f Step x' where
  reOCOperationsManual = field . reOCOperationsManual

-- | Prism: through @field@, then @reOCMaybeTrainingMaterial@ of @Field@.
instance (Choice p, Applicative f, x' ~ Step) => ReOCMaybeTrainingMaterialLike p f Step x' where
  reOCMaybeTrainingMaterial = field . reOCMaybeTrainingMaterial

{- | Rebuilds a value from the name of each field or constructor.

Laws:

> lawNamesStep == id
-}
lawNamesStep :: Step -> Step
lawNamesStep = \case
  StepField x -> review field x
  StepIndex x -> review stepIndex x

-- | The classes that a data type holding @Step@ in one field, or in one or more constructors, inherits.
type InheritStep s =
  ( ( StepLike (->) (Const ()) s s
    , FieldLike (->) (Const ()) s s
    , StepIndexLike (->) (Const ()) s s
    , PersonFullNameLike (->) (Const ()) s s
    , PersonArnLike (->) (Const ()) s s
    , PersonPhoneNumberLike (->) (Const ()) s s
    , PersonEmailAddressLike (->) (Const ()) s s
    , AddressStreetAddressLike (->) (Const ()) s s
    , AddressSuburbLike (->) (Const ()) s s
    , AddressStateOrTerritoryLike (->) (Const ()) s s
    , AddressPostcodeLike (->) (Const ()) s s
    , OperationalHeadquartersAtRegisteredOfficeLike (->) (Const ()) s s
    , OperationalHeadquartersOperationalHeadquartersAddressLike (->) (Const ()) s s
    , CompanyCompanyNameLike (->) (Const ()) s s
    , CompanyAbnLike (->) (Const ()) s s
    , CompanyArnLike (->) (Const ()) s s
    , CompanyRegisteredOfficeLike (->) (Const ()) s s
    , CompanyOperationalHeadquartersLike (->) (Const ()) s s
    , CompanyPhoneNumberLike (->) (Const ()) s s
    , CompanyEmailAddressLike (->) (Const ()) s s
    , CompanyBusinessNameLike (->) (Const ()) s s
    , FlightTerminationNoFlightTerminationSystemLike (->) (Const ()) s s
    , FlightTerminationFlightTerminationSystemLike (->) (Const ()) s s
    , EmergencyActionSituationLike (->) (Const ()) s s
    , EmergencyActionResponseLike (->) (Const ()) s s
    , EmergencyActionActionStepsLike (->) (Const ()) s s
    , RpaTypeRpaMakeLike (->) (Const ()) s s
    , RpaTypeRpaModelLike (->) (Const ()) s s
    , RpaTypeShortNameLike (->) (Const ()) s s
    , RpaTypeCategoryLike (->) (Const ()) s s
    , RpaTypeMaximumGrossWeightLike (->) (Const ()) s s
    , RpaTypeUserManualLike (->) (Const ()) s s
    , RpaTypeTransponderCarriageLike (->) (Const ()) s s
    , RpaTypeFlightTerminationLike (->) (Const ()) s s
    , RpaTypeInspectionItemsLike (->) (Const ()) s s
    , RpaTypeBeforeFlightLike (->) (Const ()) s s
    , RpaTypeBatteryWarningsLike (->) (Const ()) s s
    , RpaTypeEmergencyActionsLike (->) (Const ()) s s
    , EquipmentEquipmentDescriptionLike (->) (Const ()) s s
    , EquipmentSerialNumberLike (->) (Const ()) s s
    , AircraftSerialNumberLike (->) (Const ()) s s
    , AircraftAssociatedEquipmentLike (->) (Const ()) s s
    , OperatedTypeRpaTypeLike (->) (Const ()) s s
    , OperatedTypeAirframesLike (->) (Const ()) s s
    , RePLOriginPplTheoryLike (->) (Const ()) s s
    , RePLOriginRePLTrainingOrganisationLike (->) (Const ()) s s
    , OtherReOCRolesNoOtherReOCRolesLike (->) (Const ()) s s
    , OtherReOCRolesOtherReOCRolesHeldLike (->) (Const ()) s s
    , NomineePersonLike (->) (Const ()) s s
    , NomineeOtherQualificationsLike (->) (Const ()) s s
    )
  , ( NomineeAviationExperienceLike (->) (Const ()) s s
    , ChiefExecutiveNomineeLike (->) (Const ()) s s
    , ChiefExecutiveDirectorStatusLike (->) (Const ()) s s
    , ChiefExecutiveManagementExperienceLike (->) (Const ()) s s
    , CrpNomineeCrpIsCEOLike (->) (Const ()) s s
    , CrpNomineeCrpNominatedLike (->) (Const ()) s s
    , ChiefPilotCrpNomineeLike (->) (Const ()) s s
    , ChiefPilotRePLOriginLike (->) (Const ()) s s
    , ChiefPilotRpaHistoryLike (->) (Const ()) s s
    , ChiefPilotOtherReOCRolesLike (->) (Const ()) s s
    , ChiefPilotRadioLike (->) (Const ()) s s
    , McNomineeMcIsCEOLike (->) (Const ()) s s
    , McNomineeMcIsCRPLike (->) (Const ()) s s
    , McNomineeMcNominatedLike (->) (Const ()) s s
    , KeyPersonnelChiefExecutiveLike (->) (Const ()) s s
    , KeyPersonnelChiefPilotLike (->) (Const ()) s s
    , KeyPersonnelMcNomineeLike (->) (Const ()) s s
    , OperatorCompanyLike (->) (Const ()) s s
    , OperatorKeyPersonnelLike (->) (Const ()) s s
    , OperatorFleetLike (->) (Const ()) s s
    , ContactPersonFullNameLike (->) (Const ()) s s
    , ContactPersonPositionLike (->) (Const ()) s s
    , ContactPersonPhoneNumberLike (->) (Const ()) s s
    , ContactPersonEmailAddressLike (->) (Const ()) s s
    , PrimaryContactApplicantIsPrimaryContactLike (->) (Const ()) s s
    , PrimaryContactPrimaryContactPersonLike (->) (Const ()) s s
    , HistoryAnswerNoHistoryLike (->) (Const ()) s s
    , HistoryAnswerHistoryDisclosedLike (->) (Const ()) s s
    , PersonnelHistoryActionTakenLike (->) (Const ()) s s
    , PersonnelHistoryTransportLicenceRefusedLike (->) (Const ()) s s
    , PersonnelHistoryCriminalConvictionLike (->) (Const ()) s s
    , PersonnelHistorySuspensionPendingLike (->) (Const ()) s s
    , RegulatoryActionReocSuspendedOrCancelledLike (->) (Const ()) s s
    , RegulatoryActionTypeOfActionLike (->) (Const ()) s s
    , RegulatoryActionAuthorisationActionLike (->) (Const ()) s s
    , RegulatoryActionActionDateLike (->) (Const ()) s s
    , RegulatoryActionActionDetailsLike (->) (Const ()) s s
    , RegulatoryHistoryNoRegulatoryActionLike (->) (Const ()) s s
    , RegulatoryHistoryRegulatoryActionTakenLike (->) (Const ()) s s
    , DeclarantFullNameLike (->) (Const ()) s s
    , DeclarantRoleLike (->) (Const ()) s s
    , DeclarationDeclaredByCEOLike (->) (Const ()) s s
    , DeclarationDeclaredByResponsibleManagerLike (->) (Const ()) s s
    , DeclarationDeclaredByAgentLike (->) (Const ()) s s
    , DeclarationDeclaredByOtherLike (->) (Const ()) s s
    , WrittenSignatureWrittenSignatureImageLike (->) (Const ()) s s
    , WrittenSignatureWrittenSignatureFileLike (->) (Const ()) s s
    , ApplicationFormPrimaryContactLike (->) (Const ()) s s
    , ApplicationFormPersonnelHistoryLike (->) (Const ()) s s
    , ApplicationFormRegulatoryHistoryLike (->) (Const ()) s s
    )
  , ( ApplicationFormProceduresLibraryLike (->) (Const ()) s s
    , ApplicationFormOtherDocumentsLike (->) (Const ()) s s
    , ApplicationFormDeclarationLike (->) (Const ()) s s
    , ApplicationFormSignatureLike (->) (Const ()) s s
    , VersionMajorVersionLike (->) (Const ()) s s
    , VersionMinorVersionLike (->) (Const ()) s s
    , FirstIssueVersionLike (->) (Const ()) s s
    , FirstIssueIssueDateLike (->) (Const ()) s s
    , FirstIssueEffectiveLike (->) (Const ()) s s
    , FirstIssuePartsLike (->) (Const ()) s s
    , FirstIssueDetailsLike (->) (Const ()) s s
    , RevisionVersionIncrementLike (->) (Const ()) s s
    , RevisionMonthsAfterLike (->) (Const ()) s s
    , RevisionEffectiveLike (->) (Const ()) s s
    , RevisionPartsLike (->) (Const ()) s s
    , RevisionDetailsLike (->) (Const ()) s s
    , PoliciesRecencyFlightsLike (->) (Const ()) s s
    , PoliciesRecencyDaysLike (->) (Const ()) s s
    , PoliciesRefresherMonthsLike (->) (Const ()) s s
    , PoliciesAlcoholHoursLike (->) (Const ()) s s
    , PoliciesRestHoursLike (->) (Const ()) s s
    , PoliciesDutyHoursLike (->) (Const ()) s s
    , PoliciesInspectionMonthsLike (->) (Const ()) s s
    , PoliciesInspectionHoursLike (->) (Const ()) s s
    , PoliciesBatteryReserveLike (->) (Const ()) s s
    , PoliciesBackupFrequencyLike (->) (Const ()) s s
    , PoliciesIndependentReviewYearsLike (->) (Const ()) s s
    , PoliciesCheckingMonthsLike (->) (Const ()) s s
    , RiskAssessmentRiskLikelihoodLike (->) (Const ()) s s
    , RiskAssessmentRiskConsequenceLike (->) (Const ()) s s
    , RiskHazardLike (->) (Const ()) s s
    , RiskRiskDescriptionLike (->) (Const ()) s s
    , RiskExistingControlsLike (->) (Const ()) s s
    , RiskInitialRiskLike (->) (Const ()) s s
    , RiskAdditionalControlsLike (->) (Const ()) s s
    , RiskResidualRiskLike (->) (Const ()) s s
    , RiskRiskOwnerLike (->) (Const ()) s s
    , RiskDateEnteredLike (->) (Const ()) s s
    , RiskReviewMonthsLike (->) (Const ()) s s
    , OperationsManualFirstIssueLike (->) (Const ()) s s
    , OperationsManualRevisionsLike (->) (Const ()) s s
    , OperationsManualServicesLike (->) (Const ()) s s
    , OperationsManualPoliciesLike (->) (Const ()) s s
    , OperationsManualRiskRegisterLike (->) (Const ()) s s
    , OperationsManualCrewLike (->) (Const ()) s s
    , OperationsManualPilotsLike (->) (Const ()) s s
    , CriNomineeCriIsCEOLike (->) (Const ()) s s
    , CriNomineeCriIsCRPLike (->) (Const ()) s s
    , CriNomineeCriIsMCLike (->) (Const ()) s s
    , CriNomineeCriNominatedLike (->) (Const ()) s s
    )
  , ( RePLHoldingHoldsRePLForEachTypeLike (->) (Const ()) s s
    , RePLHoldingRePLHoldingIntentLike (->) (Const ()) s s
    , TeachingQualificationTeachingQualificationHeldLike (->) (Const ()) s s
    , TeachingQualificationTeachingQualificationIntentLike (->) (Const ()) s s
    , OperationalExperienceHasOperationalExperienceLike (->) (Const ()) s s
    , OperationalExperienceOperationalExperienceIntentLike (->) (Const ()) s s
    , OperationalExperienceOperationalExperienceNotApplicableLike (->) (Const ()) s s
    , TrainingCourseCourseKindLike (->) (Const ()) s s
    , TrainingCourseTrainingRPALike (->) (Const ()) s s
    , TrainingCourseComplexitiesLike (->) (Const ()) s s
    , TrainingArrangementsTheoryVenuesLike (->) (Const ()) s s
    , TrainingArrangementsPracticalAreasLike (->) (Const ()) s s
    , TrainingArrangementsMaxStudentsPerCourseLike (->) (Const ()) s s
    , TrainingArrangementsMaxStudentsPerInstructorLike (->) (Const ()) s s
    , TrainingArrangementsTakeoverLike (->) (Const ()) s s
    , TrainingArrangementsTheoryLike (->) (Const ()) s s
    , TrainingArrangementsExamLike (->) (Const ()) s s
    , TrainingArrangementsExamPassMarkLike (->) (Const ()) s s
    , TrainingArrangementsExaminerLike (->) (Const ()) s s
    , TrainingArrangementsSimulatorLike (->) (Const ()) s s
    , TrainingMaterialCriNomineeLike (->) (Const ()) s s
    , TrainingMaterialRePLHoldingLike (->) (Const ()) s s
    , TrainingMaterialTeachingQualificationLike (->) (Const ()) s s
    , TrainingMaterialOperationalExperienceLike (->) (Const ()) s s
    , TrainingMaterialCriOtherReOCRolesLike (->) (Const ()) s s
    , TrainingMaterialTrainingCoursesLike (->) (Const ()) s s
    , TrainingMaterialTrainingArrangementsLike (->) (Const ()) s s
    , ReOCOperatorLike (->) (Const ()) s s
    , ReOCApplicationFormLike (->) (Const ()) s s
    , ReOCOperationsManualLike (->) (Const ()) s s
    , ReOCMaybeTrainingMaterialLike (->) (Const ()) s s
    )
  )

-- | Checks that a data type inherits every class of @InheritStep@.
inheritStep :: (InheritStep s) => proxy s -> ()
inheritStep _ = ()

-- | The checks of inheritance of @Step@.
inheritsStep :: [()]
inheritsStep =
  [ inheritField p
  ]
 where
  p = Proxy :: Proxy Step