| Copyright | (c) 2020-2022 Kowainik |
|---|---|
| License | MPL-2.0 |
| Maintainer | Kowainik <xrom.xkov@gmail.com> |
| Safe Haskell | None |
| Language | Haskell2010 |
Extensions.Types
Description
Data types and functions to work with different types of Extensions.
extensions library supports the following types of extensions:
Haskell2010 Default Enabled Extensions | On of OnOffExtensions |
Haskell2010 Default Disabled Extensions | Off of OnOffExtensions |
SafeHaskell Extensions | SafeHaskellExtensions |
Synopsis
- data Extensions = Extensions {}
- data ParsedExtensions = ParsedExtensions {}
- data CabalAndModuleExtensions = CabalAndModuleExtensions {}
- type ExtensionsResult = Either ExtensionsError Extensions
- data ExtensionsError
- data CabalException
- data ModuleParseError
- emptyExtensions :: Extensions
- emptyParsedExtensions :: ParsedExtensions
- data OnOffExtension
- showOnOffExtension :: OnOffExtension -> Text
- readOnOffExtension :: String -> Maybe OnOffExtension
- readExtension :: String -> Maybe Extension
- mergeExtensions :: [OnOffExtension] -> Set OnOffExtension
- mergeAnyExtensions :: ParsedExtensions -> ParsedExtensions -> ExtensionsResult
- default2010Extensions :: [Extension]
- data SafeHaskellExtension
- = Unsafe
- | Trustworthy
- | Safe
Documentation
data Extensions #
Main returned data type that includes merged OnOffExtensions and possibly
one SafeHaskellExtension.
Constructors
| Extensions | |
Fields | |
Instances
| Show Extensions # | |
Defined in Extensions.Types Methods showsPrec :: Int -> Extensions -> ShowS # show :: Extensions -> String # showList :: [Extensions] -> ShowS # | |
| Eq Extensions # | |
Defined in Extensions.Types | |
data ParsedExtensions #
Extensions that are collected in the result of parsing .cabal file or
Haskell module (both OnOffExtension and possibly one SafeHaskellExtension).
OnOffExtensions are not necessary unique. They reflect exactly the extensions
found during parsing.
Constructors
| ParsedExtensions | |
Fields | |
Instances
| Show ParsedExtensions # | |
Defined in Extensions.Types Methods showsPrec :: Int -> ParsedExtensions -> ShowS # show :: ParsedExtensions -> String # showList :: [ParsedExtensions] -> ShowS # | |
| Eq ParsedExtensions # | |
Defined in Extensions.Types Methods (==) :: ParsedExtensions -> ParsedExtensions -> Bool # (/=) :: ParsedExtensions -> ParsedExtensions -> Bool # | |
data CabalAndModuleExtensions #
Stores extensions from .cabal file and module separately.
Constructors
| CabalAndModuleExtensions | |
Fields | |
Instances
| Show CabalAndModuleExtensions # | |
Defined in Extensions.Types Methods showsPrec :: Int -> CabalAndModuleExtensions -> ShowS # show :: CabalAndModuleExtensions -> String # showList :: [CabalAndModuleExtensions] -> ShowS # | |
| Eq CabalAndModuleExtensions # | |
Defined in Extensions.Types Methods (==) :: CabalAndModuleExtensions -> CabalAndModuleExtensions -> Bool # (/=) :: CabalAndModuleExtensions -> CabalAndModuleExtensions -> Bool # | |
type ExtensionsResult = Either ExtensionsError Extensions #
Type alias for the result of extensions analysis.
Errors
data ExtensionsError #
Represents possible errors during the work of extensions analyser.
Constructors
| ModuleParseError FilePath ModuleParseError | Parse error during module extensions parsing. |
| CabalError CabalException | Error during |
| SourceNotFound FilePath | File is in cabal file, but the source file is not provided where requested. |
| NotCabalModule FilePath | Source file is provided, but module is not in cabal file. |
| SafeHaskellConflict (NonEmpty SafeHaskellExtension) | Conflicting |
Instances
| Show ExtensionsError # | |
Defined in Extensions.Types Methods showsPrec :: Int -> ExtensionsError -> ShowS # show :: ExtensionsError -> String # showList :: [ExtensionsError] -> ShowS # | |
| Eq ExtensionsError # | |
Defined in Extensions.Types Methods (==) :: ExtensionsError -> ExtensionsError -> Bool # (/=) :: ExtensionsError -> ExtensionsError -> Bool # | |
data CabalException #
Exception that gets thrown when working with .cabal files.
Constructors
| CabalFileNotFound FilePath | The |
| CabalParseError Text | Parsing errors in the |
| CabalSafeExtensionsConflict (NonEmpty SafeHaskellExtension) | Conflicting |
Instances
| Exception CabalException # | |
Defined in Extensions.Types Methods toException :: CabalException -> SomeException # fromException :: SomeException -> Maybe CabalException # displayException :: CabalException -> String # backtraceDesired :: CabalException -> Bool # | |
| Show CabalException # | |
Defined in Extensions.Types Methods showsPrec :: Int -> CabalException -> ShowS # show :: CabalException -> String # showList :: [CabalException] -> ShowS # | |
| Eq CabalException # | |
Defined in Extensions.Types Methods (==) :: CabalException -> CabalException -> Bool # (/=) :: CabalException -> CabalException -> Bool # | |
data ModuleParseError #
Error while parsing Haskell source file.
Constructors
| ParsecError ParseError | File parsing error. |
| UnknownExtensions (NonEmpty String) | Uknown extensions were used in the module. |
| ModuleSafeHaskellConflict (NonEmpty SafeHaskellExtension) | Conflicting |
| FileNotFound FilePath | Module file not found. |
Instances
| Show ModuleParseError # | |
Defined in Extensions.Types Methods showsPrec :: Int -> ModuleParseError -> ShowS # show :: ModuleParseError -> String # showList :: [ModuleParseError] -> ShowS # | |
| Eq ModuleParseError # | |
Defined in Extensions.Types Methods (==) :: ModuleParseError -> ModuleParseError -> Bool # (/=) :: ModuleParseError -> ModuleParseError -> Bool # | |
Defaults / empty data types
emptyExtensions :: Extensions #
Empty Extensions with no specified SafeHaskellExtension.
emptyParsedExtensions :: ParsedExtensions #
Empty ParsedExtensions with no specified SafeHaskellExtension.
Enabled/Disabled Haskell2010 Extensions
data OnOffExtension #
Represents enabled/disabled extensions.
Instances
| Show OnOffExtension # | |
Defined in Extensions.Types Methods showsPrec :: Int -> OnOffExtension -> ShowS # show :: OnOffExtension -> String # showList :: [OnOffExtension] -> ShowS # | |
| Eq OnOffExtension # | |
Defined in Extensions.Types Methods (==) :: OnOffExtension -> OnOffExtension -> Bool # (/=) :: OnOffExtension -> OnOffExtension -> Bool # | |
| Ord OnOffExtension # | |
Defined in Extensions.Types Methods compare :: OnOffExtension -> OnOffExtension -> Ordering # (<) :: OnOffExtension -> OnOffExtension -> Bool # (<=) :: OnOffExtension -> OnOffExtension -> Bool # (>) :: OnOffExtension -> OnOffExtension -> Bool # (>=) :: OnOffExtension -> OnOffExtension -> Bool # max :: OnOffExtension -> OnOffExtension -> OnOffExtension # min :: OnOffExtension -> OnOffExtension -> OnOffExtension # | |
showOnOffExtension :: OnOffExtension -> Text #
Display OnOffExtension as GHC recognizes it.
readOnOffExtension :: String -> Maybe OnOffExtension #
Parse OnOffExtension from a string that specifies extension.
readExtension :: String -> Maybe Extension #
mergeExtensions :: [OnOffExtension] -> Set OnOffExtension #
Take accumulated OnOffExtensions, and merge them into one Set,
excluding enabling of default2010Extensions.
If the default extension is enabled manually it still won't count as it doesn't affect real behaviour. However, disabling of default extension will be included in the list.
So, basically, this set will only have On extensions that are not defaults,
and Off extensions of defaults.
'foldl'' is used in order to process them in the right order: first all cabal extensions and then extensions from the module in the order of appearance.
Arguments
| :: ParsedExtensions | Cabal parsed extensions. |
| -> ParsedExtensions | Module parsed extensions. |
| -> ExtensionsResult |
Similar to mergeExtensions, but also merge SafeHaskellExtensions.
In case of conflicting SafeHaskellExtension returns Left with the pair of
conflicting extension constructors under SafeHaskellConflict error.
default2010Extensions :: [Extension] #
Default enabled extensions for Haskell2010
Safe Haskell Extensions
data SafeHaskellExtension #
Language extensions that are used by Safe Haskell to indicate safety of the code.
To find out more, checkout the official documentation on SafeHaskell:
Constructors
| Unsafe | |
| Trustworthy | |
| Safe |