mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 01:07:18 +03:00
Up-(actually down-)grade to ghc-lib-8.8.0.20190610 (#1576)
* Up-(actually down-)grade to ghc-lib-8.8.0.20190610 * A `#ifndef GHC_STABLE` removed. `ml_hie_file` must be set unconditionally * Pass Opt_WriteHie in xFlagsSet * Oops. Revert. This breaks Windows. Very confusing * Disable test; track in issue https://github.com/digital-asset/daml/issues/1582 * Remove Opt_WriteHie flag (Causes test failures trying to write into a read-only filesystem in CI)
This commit is contained in:
parent
e6c1d1e414
commit
da88ab0f9d
@ -491,7 +491,7 @@ hazel_repositories(
|
||||
extra =
|
||||
# Read [Working on ghc-lib] for ghc-lib update instructions at
|
||||
# https://github.com/DACH-NY/daml/blob/master/ghc-lib/working-on-ghc-lib.md
|
||||
hazel_ghclibs("0.20190604.1", "283372061a51a6524f2c2940dc328985317cb5134a2beb8fd2a847a9e6e157d5", "522ab61c7fe386e8c8c2d396d063bc5b690e33b056defbb8304141890ec6786e") +
|
||||
hazel_ghclibs("8.8.0.20190610", "04fcd1d94d4976b3374b260ac45975bfe431d15351e725ee3c6708e4f30a6fdf", "a837ddfd5bb3677cb5c6c25fc12cb8fc29958e101e677f12be6ec39ae78bd2a6") +
|
||||
hazel_github_external("awakesecurity", "proto3-wire", "43d8220dbc64ef7cc7681887741833a47b61070f", "1c3a7fbf4ab3308776675c6202583f9750de496757f3ad4815e81edd122d75e1") +
|
||||
hazel_github_external("awakesecurity", "proto3-suite", "dd01df7a3f6d0f1ea36125a67ac3c16936b53da0", "59ea7b876b14991347918eefefe24e7f0e064b5c2cc14574ac4ab5d6af6413ca") +
|
||||
hazel_hackage("happy", "1.19.10", "22eb606c97105b396e1c7dc27e120ca02025a87f3e44d2ea52be6a653a52caed") +
|
||||
|
@ -6,18 +6,11 @@
|
||||
-- | Attempt at hiding the GHC version differences we can.
|
||||
module Development.IDE.Compat(
|
||||
HieFile(..),
|
||||
HieFileResult(..),
|
||||
mkHieFile,
|
||||
writeHieFile,
|
||||
readHieFile
|
||||
) where
|
||||
|
||||
#ifndef GHC_STABLE
|
||||
import HieBin
|
||||
import HieAst
|
||||
import HieTypes
|
||||
#else
|
||||
|
||||
import GHC
|
||||
import GhcPlugins
|
||||
import NameCache
|
||||
@ -31,11 +24,7 @@ mkHieFile _ _ _ = return (HieFile () [])
|
||||
writeHieFile :: FilePath -> HieFile -> IO ()
|
||||
writeHieFile _ _ = return ()
|
||||
|
||||
readHieFile :: NameCache -> FilePath -> IO (HieFileResult, ())
|
||||
readHieFile _ _ = return (HieFileResult $ HieFile () [], ())
|
||||
readHieFile :: NameCache -> FilePath -> IO (HieFile, ())
|
||||
readHieFile _ _ = return (HieFile () [], ())
|
||||
|
||||
data HieFile = HieFile {hie_module :: (), hie_exports :: [AvailInfo]}
|
||||
|
||||
data HieFileResult = HieFileResult {hie_file_result :: HieFile}
|
||||
|
||||
#endif
|
||||
|
@ -50,9 +50,6 @@ doCpp dflags raw input_fn output_fn = do
|
||||
|
||||
let cpp_prog args | raw = SysTools.runCpp dflags args
|
||||
| otherwise = SysTools.runCc
|
||||
#ifndef GHC_STABLE
|
||||
Nothing
|
||||
#endif
|
||||
dflags (SysTools.Option "-E" : args)
|
||||
|
||||
let target_defs = [] {-
|
||||
|
@ -394,14 +394,8 @@ parseFileContents preprocessor filename contents = do
|
||||
return (contents, dflags)
|
||||
|
||||
case unP Parser.parseModule (mkPState dflags contents loc) of
|
||||
#ifdef GHC_STABLE
|
||||
PFailed _ locErr msgErr ->
|
||||
Ex.throwE $ mkErrorDoc dflags locErr msgErr
|
||||
#else
|
||||
PFailed s ->
|
||||
-- A fatal parse error was encountered.
|
||||
Ex.throwE $ toDiagnostics dflags $ snd $ getMessages s dflags
|
||||
#endif
|
||||
POk pst rdr_module ->
|
||||
let hpm_annotations =
|
||||
(Map.fromListWith (++) $ annotations pst,
|
||||
|
@ -306,7 +306,7 @@ getHieFileRule =
|
||||
defineNoFile $ \(GetHieFile f) -> do
|
||||
u <- liftIO $ mkSplitUniqSupply 'a'
|
||||
let nameCache = initNameCache u []
|
||||
liftIO $ fmap (hie_file_result . fst) $ readHieFile nameCache f
|
||||
liftIO $ fmap fst $ readHieFile nameCache f
|
||||
|
||||
-- | A rule that wires per-file rules together
|
||||
mainRule :: Rules ()
|
||||
|
@ -26,9 +26,6 @@ import Data.IORef
|
||||
import Control.Exception
|
||||
import FileCleanup
|
||||
import Platform
|
||||
#ifndef GHC_STABLE
|
||||
import ToolSettings
|
||||
#endif
|
||||
|
||||
----------------------------------------------------------------------
|
||||
-- GHC setup
|
||||
@ -73,25 +70,9 @@ fakeDynFlags = defaultDynFlags settings ([], [])
|
||||
settings = Settings
|
||||
{ sTargetPlatform = platform
|
||||
, sPlatformConstants = platformConstants
|
||||
#ifdef GHC_STABLE
|
||||
, sProgramName = "ghc"
|
||||
, sProjectVersion = cProjectVersion
|
||||
, sOpt_P_fingerprint = fingerprint0
|
||||
#else
|
||||
, sGhcNameVersion = GhcNameVersion
|
||||
{ ghcNameVersion_programName = "ghc"
|
||||
, ghcNameVersion_projectVersion = cProjectVersion
|
||||
}
|
||||
, sFileSettings = FileSettings
|
||||
{ -- fileSettings_tmpDir = "."
|
||||
}
|
||||
, sPlatformMisc = PlatformMisc
|
||||
{ platformMisc_integerLibraryType = IntegerSimple
|
||||
}
|
||||
, sToolSettings = ToolSettings
|
||||
{ toolSettings_opt_P_fingerprint = fingerprint0
|
||||
}
|
||||
#endif
|
||||
}
|
||||
platform = Platform
|
||||
{ platformWordSize=8
|
||||
|
@ -4,7 +4,7 @@
|
||||
-- Copied from https://github.com/ghc/ghc/blob/23f6f31dd66d7c370cb8beec3f1d96a0cb577393/libraries/ghc-prim/GHC/Classes.hs
|
||||
-- All DA specific modifications are marked with [DA]
|
||||
|
||||
{-# LANGUAGE NoNewColonConvention #-} -- [DA]
|
||||
{-# LANGUAGE DamlSyntax #-} -- [DA]
|
||||
|
||||
-- [DA] {-# LANGUAGE CPP #-}
|
||||
{-# LANGUAGE Trustworthy #-}
|
||||
@ -69,8 +69,8 @@ default () -- Double isn't available yet
|
||||
-- | The syntax `?x :: a` is desugared into `IP "x" a`
|
||||
-- IP is declared very early, so that libraries can take
|
||||
-- advantage of the implicit-call-stack feature
|
||||
class IP (x :: Symbol) a | x -> a where
|
||||
ip :: a
|
||||
class IP (x : Symbol) a | x -> a where
|
||||
ip : a
|
||||
|
||||
{- $matching_overloaded_methods_in_rules
|
||||
|
||||
@ -137,7 +137,7 @@ for the types in "GHC.Word" and "GHC.Int".
|
||||
-- Minimal complete definition: either `==` or `/=`.
|
||||
--
|
||||
class Eq a where
|
||||
(==), (/=) :: a -> a -> Bool
|
||||
(==), (/=) : a -> a -> Bool
|
||||
|
||||
x /= y = not (x == y)
|
||||
x == y = not (x /= y)
|
||||
@ -181,7 +181,7 @@ deriving instance (Eq a, Eq b) => Eq (Either a b)
|
||||
|
||||
-- slightly strange encoding to avoid value level recursion
|
||||
-- and to optimise so we avoid going through the dictionary lots of times
|
||||
eqList :: (a -> a -> Bool) -> [a] -> [a] -> Bool
|
||||
eqList : (a -> a -> Bool) -> [a] -> [a] -> Bool
|
||||
eqList = primitive @"BEEqualList"
|
||||
|
||||
instance (Eq a) => Eq [a] where
|
||||
@ -234,9 +234,9 @@ instance Eq Text where
|
||||
-- Using `compare` can be more efficient for complex types.
|
||||
--
|
||||
class (Eq a) => Ord a where
|
||||
compare :: a -> a -> Ordering
|
||||
(<), (<=), (>), (>=) :: a -> a -> Bool
|
||||
max, min :: a -> a -> a
|
||||
compare : a -> a -> Ordering
|
||||
(<), (<=), (>), (>=) : a -> a -> Bool
|
||||
max, min : a -> a -> a
|
||||
|
||||
compare x y = if x == y then EQ
|
||||
-- NB: must be '<=' not '<' to validate the
|
||||
@ -294,9 +294,9 @@ deriving instance (Ord a, Ord b) => Ord (Either a b)
|
||||
|
||||
instance (Ord a) => Ord [a] where
|
||||
compare [] [] = EQ
|
||||
compare [] (_:_) = LT
|
||||
compare (_:_) [] = GT
|
||||
compare (x:xs) (y:ys) = case compare x y of
|
||||
compare [] (_ :: _) = LT
|
||||
compare (_ :: _) [] = GT
|
||||
compare (x :: xs) (y :: ys) = case compare x y of
|
||||
EQ -> compare xs ys
|
||||
other -> other
|
||||
|
||||
@ -336,7 +336,7 @@ instance Ord Text where
|
||||
-- This function has short-circuiting semantics, i.e., when both arguments are
|
||||
-- present and the first arguments evaluates to 'False', the second argument
|
||||
-- is not evaluated at all.
|
||||
(&&) :: Bool -> Bool -> Bool
|
||||
(&&) : Bool -> Bool -> Bool
|
||||
True && x = x
|
||||
False && _ = False
|
||||
|
||||
@ -344,11 +344,11 @@ False && _ = False
|
||||
-- This function has short-circuiting semantics, i.e., when both arguments are
|
||||
-- present and the first arguments evaluates to 'True', the second argument
|
||||
-- is not evaluated at all.
|
||||
(||) :: Bool -> Bool -> Bool
|
||||
(||) : Bool -> Bool -> Bool
|
||||
True || _ = True
|
||||
False || x = x
|
||||
|
||||
-- | Boolean \"not\"
|
||||
not :: Bool -> Bool
|
||||
not : Bool -> Bool
|
||||
not True = False
|
||||
not False = True
|
||||
|
@ -4,7 +4,7 @@
|
||||
-- Copied from https://github.com/ghc/ghc/blob/23f6f31dd66d7c370cb8beec3f1d96a0cb577393/libraries/ghc-prim/GHC/Tuple.hs
|
||||
-- All DA specific modifications are marked with [DA]
|
||||
|
||||
{-# LANGUAGE NoNewColonConvention #-} -- [DA]
|
||||
{-# LANGUAGE DamlSyntax #-} -- [DA]
|
||||
{-# LANGUAGE Trustworthy #-}
|
||||
{-# LANGUAGE NoImplicitPrelude, DeriveGeneric #-}
|
||||
{-# OPTIONS -Wno-unused-binds #-} -- the Tuple types are not exported
|
||||
|
@ -21,7 +21,7 @@
|
||||
{-# LANGUAGE TypeOperators #-}
|
||||
{-# LANGUAGE TypeSynonymInstances #-}
|
||||
{-# LANGUAGE UndecidableInstances #-}
|
||||
{-# LANGUAGE NoNewColonConvention #-}
|
||||
{-# LANGUAGE DamlSyntax #-}
|
||||
|
||||
daml 1.2
|
||||
-----------------------------------------------------------------------------
|
||||
@ -769,7 +769,7 @@ type Type = *
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- | Void: used for datatypes without constructors
|
||||
data V1 (p :: *)
|
||||
data V1 (p : *)
|
||||
deriving ( Eq -- ^ @since 4.9.0.0
|
||||
, Ord -- ^ @since 4.9.0.0
|
||||
-- , Read -- ^ @since 4.9.0.0
|
||||
@ -784,7 +784,7 @@ data V1 (p :: *)
|
||||
-- v <> _ = v
|
||||
|
||||
-- | Unit: used for constructors without arguments
|
||||
data U1 (p :: *) = U1
|
||||
data U1 (p : *) = U1
|
||||
-- deriving ( Generic -- ^ @since 4.7.0.0
|
||||
-- , Generic1 -- ^ @since 4.9.0.0
|
||||
-- )
|
||||
@ -835,7 +835,7 @@ instance Show (U1 p) where
|
||||
-- mempty = U1
|
||||
|
||||
-- | Used for marking occurrences of the parameter
|
||||
newtype Par1 p = Par1 { unPar1 :: p }
|
||||
newtype Par1 p = Par1 { unPar1 : p }
|
||||
deriving ( Eq -- ^ @since 4.7.0.0
|
||||
, Ord -- ^ @since 4.7.0.0
|
||||
-- , Read -- ^ @since 4.7.0.0
|
||||
@ -863,7 +863,7 @@ newtype Par1 p = Par1 { unPar1 :: p }
|
||||
|
||||
-- | Recursive calls of kind `* -> *` (or kind `k -> *`, when @PolyKinds@
|
||||
-- is enabled)
|
||||
newtype Rec1 (f :: * -> Type) (p :: *) = Rec1 { unRec1 :: f p }
|
||||
newtype Rec1 (f : * -> Type) (p : *) = Rec1 { unRec1 : f p }
|
||||
deriving ( Eq -- ^ @since 4.7.0.0
|
||||
, Ord -- ^ @since 4.7.0.0
|
||||
-- , Read -- ^ @since 4.7.0.0
|
||||
@ -893,7 +893,7 @@ newtype Rec1 (f :: * -> Type) (p :: *) = Rec1 { unRec1 :: f p }
|
||||
-- deriving instance Monoid (f p) => Monoid (Rec1 f p)
|
||||
|
||||
-- | Constants, additional parameters and recursion of kind @*@
|
||||
newtype K1 (i :: Type) c (p :: *) = K1 { unK1 :: c }
|
||||
newtype K1 (i : Type) c (p : *) = K1 { unK1 : c }
|
||||
deriving ( Eq -- ^ @since 4.7.0.0
|
||||
, Ord -- ^ @since 4.7.0.0
|
||||
-- , Read -- ^ @since 4.7.0.0
|
||||
@ -934,8 +934,8 @@ newtype K1 (i :: Type) c (p :: *) = K1 { unK1 :: c }
|
||||
-- deriving instance Monoid (f p) => Monoid (M1 i c f p)
|
||||
|
||||
-- | Meta-information (constructor names, etc.)
|
||||
newtype M1 (i :: Type) (c :: Meta) (f :: * -> Type) (p :: *) =
|
||||
M1 { unM1 :: f p }
|
||||
newtype M1 (i : Type) (c : Meta) (f : * -> Type) (p : *) =
|
||||
M1 { unM1 : f p }
|
||||
deriving ( Eq -- ^ @since 4.7.0.0
|
||||
, Ord -- ^ @since 4.7.0.0
|
||||
-- , Read -- ^ @since 4.7.0.0
|
||||
@ -947,7 +947,7 @@ newtype M1 (i :: Type) (c :: Meta) (f :: * -> Type) (p :: *) =
|
||||
|
||||
-- | Sums: encode choice between constructors
|
||||
infixr 5 :+:
|
||||
data (:+:) (f :: * -> Type) (g :: * -> Type) (p :: *) = L1 (f p) | R1 (g p)
|
||||
data (:+:) (f : * -> Type) (g : * -> Type) (p : *) = L1 (f p) | R1 (g p)
|
||||
deriving ( Eq -- ^ @since 4.7.0.0
|
||||
, Ord -- ^ @since 4.7.0.0
|
||||
-- , Read -- ^ @since 4.7.0.0
|
||||
@ -959,7 +959,7 @@ data (:+:) (f :: * -> Type) (g :: * -> Type) (p :: *) = L1 (f p) | R1 (g p)
|
||||
|
||||
-- | Products: encode multiple arguments to constructors
|
||||
infixr 6 :*:
|
||||
data (:*:) (f :: * -> Type) (g :: * -> Type) (p :: *) = P1 {prodL1 :: f p, prodR1 :: g p}
|
||||
data (:*:) (f : * -> Type) (g : * -> Type) (p : *) = P1 {prodL1 : f p, prodR1 : g p}
|
||||
deriving ( Eq -- ^ @since 4.7.0.0
|
||||
, Ord -- ^ @since 4.7.0.0
|
||||
-- , Read -- ^ @since 4.7.0.0
|
||||
@ -1000,8 +1000,8 @@ data (:*:) (f :: * -> Type) (g :: * -> Type) (p :: *) = P1 {prodL1 :: f p, prodR
|
||||
|
||||
-- | Composition of functors
|
||||
infixr 7 :.:
|
||||
newtype (:.:) (f :: * -> Type) (g :: * -> *) (p :: *) =
|
||||
Comp1 { unComp1 :: f (g p) }
|
||||
newtype (:.:) (f : * -> Type) (g : * -> *) (p : *) =
|
||||
Comp1 { unComp1 : f (g p) }
|
||||
deriving ( Eq -- ^ @since 4.7.0.0
|
||||
, Ord -- ^ @since 4.7.0.0
|
||||
-- , Read -- ^ @since 4.7.0.0
|
||||
@ -1020,7 +1020,7 @@ newtype (:.:) (f :: * -> Type) (g :: * -> *) (p :: *) =
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance (Alternative f, Applicative g) => Alternative (f :.: g) where
|
||||
-- empty = Comp1 empty
|
||||
-- (<|>) = coerce ((<|>) :: f (g a) -> f (g a) -> f (g a)) ::
|
||||
-- (<|>) = coerce ((<|>) : f (g a) -> f (g a) -> f (g a)) :
|
||||
-- forall a . (f :.: g) a -> (f :.: g) a -> (f :.: g) a
|
||||
--
|
||||
-- -- | @since 4.12.0.0
|
||||
@ -1032,12 +1032,12 @@ newtype (:.:) (f :: * -> Type) (g :: * -> *) (p :: *) =
|
||||
-- | Constants of unlifted kinds
|
||||
--
|
||||
-- @since 4.9.0.0
|
||||
--data family URec (a :: Type) (p :: k)
|
||||
--data family URec (a : Type) (p : k)
|
||||
|
||||
-- | Used for marking occurrences of 'Addr#'
|
||||
--
|
||||
-- @since 4.9.0.0
|
||||
--data instance URec (Ptr ()) (p :: k) = UAddr { uAddr# :: Addr# }
|
||||
--data instance URec (Ptr ()) (p : k) = UAddr { uAddr# : Addr# }
|
||||
--deriving ( Eq -- ^ @since 4.9.0.0
|
||||
--, Ord -- ^ @since 4.9.0.0
|
||||
--, Functor -- ^ @since 4.9.0.0
|
||||
@ -1048,7 +1048,7 @@ newtype (:.:) (f :: * -> Type) (g :: * -> *) (p :: *) =
|
||||
-- | Used for marking occurrences of 'Char#'
|
||||
--
|
||||
-- @since 4.9.0.0
|
||||
--data instance URec Char (p :: k) = UChar { uChar# :: Char# }
|
||||
--data instance URec Char (p : k) = UChar { uChar# : Char# }
|
||||
--deriving ( Eq -- ^ @since 4.9.0.0
|
||||
--, Ord -- ^ @since 4.9.0.0
|
||||
--, Show -- ^ @since 4.9.0.0
|
||||
@ -1060,7 +1060,7 @@ newtype (:.:) (f :: * -> Type) (g :: * -> *) (p :: *) =
|
||||
-- | Used for marking occurrences of 'Double#'
|
||||
--
|
||||
-- @since 4.9.0.0
|
||||
--data instance URec Double (p :: k) = UDouble { uDouble# :: Double# }
|
||||
--data instance URec Double (p : k) = UDouble { uDouble# : Double# }
|
||||
--deriving ( Eq -- ^ @since 4.9.0.0
|
||||
--, Ord -- ^ @since 4.9.0.0
|
||||
--, Show -- ^ @since 4.9.0.0
|
||||
@ -1072,7 +1072,7 @@ newtype (:.:) (f :: * -> Type) (g :: * -> *) (p :: *) =
|
||||
-- | Used for marking occurrences of 'Float#'
|
||||
--
|
||||
-- @since 4.9.0.0
|
||||
--data instance URec Float (p :: k) = UFloat { uFloat# :: Float# }
|
||||
--data instance URec Float (p : k) = UFloat { uFloat# : Float# }
|
||||
--deriving ( Eq, Ord, Show
|
||||
--, Functor -- ^ @since 4.9.0.0
|
||||
--, Generic
|
||||
@ -1082,7 +1082,7 @@ newtype (:.:) (f :: * -> Type) (g :: * -> *) (p :: *) =
|
||||
-- | Used for marking occurrences of 'Int#'
|
||||
--
|
||||
-- @since 4.9.0.0
|
||||
--data instance URec Int (p :: k) = UInt { uInt# :: Int# }
|
||||
--data instance URec Int (p : k) = UInt { uInt# : Int# }
|
||||
--deriving ( Eq -- ^ @since 4.9.0.0
|
||||
--, Ord -- ^ @since 4.9.0.0
|
||||
--, Show -- ^ @since 4.9.0.0
|
||||
@ -1094,7 +1094,7 @@ newtype (:.:) (f :: * -> Type) (g :: * -> *) (p :: *) =
|
||||
-- | Used for marking occurrences of 'Word#'
|
||||
--
|
||||
-- @since 4.9.0.0
|
||||
--data instance URec Word (p :: k) = UWord { uWord# :: Word# }
|
||||
--data instance URec Word (p : k) = UWord { uWord# : Word# }
|
||||
--deriving ( Eq -- ^ @since 4.9.0.0
|
||||
--, Ord -- ^ @since 4.9.0.0
|
||||
--, Show -- ^ @since 4.9.0.0
|
||||
@ -1157,46 +1157,46 @@ type S1 = M1 S
|
||||
-- -- | Class for datatypes that represent datatypes
|
||||
-- class Datatype d where
|
||||
-- -- | The name of the datatype (unqualified)
|
||||
-- datatypeName :: t d (f :: k -> Type) (a :: k) -> [Char]
|
||||
-- datatypeName : t d (f : k -> Type) (a : k) -> [Char]
|
||||
-- -- | The fully-qualified name of the module where the type is declared
|
||||
-- moduleName :: t d (f :: k -> Type) (a :: k) -> [Char]
|
||||
-- moduleName : t d (f : k -> Type) (a : k) -> [Char]
|
||||
-- -- | The package name of the module where the type is declared
|
||||
-- --
|
||||
-- -- @since 4.9.0.0
|
||||
-- packageName :: t d (f :: k -> Type) (a :: k) -> [Char]
|
||||
-- packageName : t d (f : k -> Type) (a : k) -> [Char]
|
||||
-- -- | Marks if the datatype is actually a newtype
|
||||
-- --
|
||||
-- -- @since 4.7.0.0
|
||||
-- isNewtype :: t d (f :: k -> Type) (a :: k) -> Bool
|
||||
-- isNewtype : t d (f : k -> Type) (a : k) -> Bool
|
||||
-- isNewtype _ = False
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance (KnownSymbol n, KnownSymbol m, KnownSymbol p, SingI nt)
|
||||
-- => Datatype ('MetaData n m p nt) where
|
||||
-- datatypeName _ = symbolVal (Proxy :: Proxy n)
|
||||
-- moduleName _ = symbolVal (Proxy :: Proxy m)
|
||||
-- packageName _ = symbolVal (Proxy :: Proxy p)
|
||||
-- isNewtype _ = fromSing (sing :: Sing nt)
|
||||
-- datatypeName _ = symbolVal (Proxy : Proxy n)
|
||||
-- moduleName _ = symbolVal (Proxy : Proxy m)
|
||||
-- packageName _ = symbolVal (Proxy : Proxy p)
|
||||
-- isNewtype _ = fromSing (sing : Sing nt)
|
||||
--
|
||||
-- -- | Class for datatypes that represent data constructors
|
||||
-- class Constructor c where
|
||||
-- -- | The name of the constructor
|
||||
-- conName :: t c (f :: k -> Type) (a :: k) -> [Char]
|
||||
-- conName : t c (f : k -> Type) (a : k) -> [Char]
|
||||
--
|
||||
-- -- | The fixity of the constructor
|
||||
-- conFixity :: t c (f :: k -> Type) (a :: k) -> Fixity
|
||||
-- conFixity : t c (f : k -> Type) (a : k) -> Fixity
|
||||
-- conFixity _ = Prefix
|
||||
--
|
||||
-- -- | Marks if this constructor is a record
|
||||
-- conIsRecord :: t c (f :: k -> Type) (a :: k) -> Bool
|
||||
-- conIsRecord : t c (f : k -> Type) (a : k) -> Bool
|
||||
-- conIsRecord _ = False
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance (KnownSymbol n, SingI f, SingI r)
|
||||
-- => Constructor ('MetaCons n f r) where
|
||||
-- conName _ = symbolVal (Proxy :: Proxy n)
|
||||
-- conFixity _ = fromSing (sing :: Sing f)
|
||||
-- conIsRecord _ = fromSing (sing :: Sing r)
|
||||
-- conName _ = symbolVal (Proxy : Proxy n)
|
||||
-- conFixity _ = fromSing (sing : Sing f)
|
||||
-- conIsRecord _ = fromSing (sing : Sing r)
|
||||
|
||||
-- | Datatype to represent the fixity of a constructor. An infix
|
||||
-- | declaration directly corresponds to an application of 'Infix'.
|
||||
@ -1208,7 +1208,7 @@ data Fixity = Prefix | Infix Infix0
|
||||
--, Generic -- ^ @since 4.7.0.0
|
||||
)
|
||||
|
||||
data Infix0 = Infix0 {associativity :: Associativity, fixity :: Int} deriving (Eq, Show, Ord)
|
||||
data Infix0 = Infix0 {associativity : Associativity, fixity : Int} deriving (Eq, Show, Ord)
|
||||
|
||||
data Nat
|
||||
-- | This variant of 'Fixity' appears at the type level.
|
||||
@ -1216,10 +1216,10 @@ data Nat
|
||||
-- @since 4.9.0.0
|
||||
data FixityI = PrefixI | InfixI InfixI0
|
||||
|
||||
data InfixI0 = InfixI0 {associativity :: Associativity, fixity :: Nat}
|
||||
data InfixI0 = InfixI0 {associativity : Associativity, fixity : Nat}
|
||||
|
||||
-- | Get the precedence of a fixity value.
|
||||
prec :: Fixity -> Int
|
||||
prec : Fixity -> Int
|
||||
prec Prefix = 10
|
||||
prec (Infix (Infix0 _ n)) = n
|
||||
|
||||
@ -1325,27 +1325,27 @@ data DecidedStrictness = DecidedLazy
|
||||
-- -- | Class for datatypes that represent records
|
||||
-- class Selector s where
|
||||
-- -- | The name of the selector
|
||||
-- selName :: t s (f :: k -> Type) (a :: k) -> [Char]
|
||||
-- selName : t s (f : k -> Type) (a : k) -> [Char]
|
||||
-- -- | The selector's unpackedness annotation (if any)
|
||||
-- --
|
||||
-- -- @since 4.9.0.0
|
||||
-- selSourceUnpackedness :: t s (f :: k -> Type) (a :: k) -> SourceUnpackedness
|
||||
-- selSourceUnpackedness : t s (f : k -> Type) (a : k) -> SourceUnpackedness
|
||||
-- -- | The selector's strictness annotation (if any)
|
||||
-- --
|
||||
-- -- @since 4.9.0.0
|
||||
-- selSourceStrictness :: t s (f :: k -> Type) (a :: k) -> SourceStrictness
|
||||
-- selSourceStrictness : t s (f : k -> Type) (a : k) -> SourceStrictness
|
||||
-- -- | The strictness that the compiler inferred for the selector
|
||||
-- --
|
||||
-- -- @since 4.9.0.0
|
||||
-- selDecidedStrictness :: t s (f :: k -> Type) (a :: k) -> DecidedStrictness
|
||||
-- selDecidedStrictness : t s (f : k -> Type) (a : k) -> DecidedStrictness
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance (SingI mn, SingI su, SingI ss, SingI ds)
|
||||
-- => Selector ('MetaSel mn su ss ds) where
|
||||
-- selName _ = fromMaybe "" (fromSing (sing :: Sing mn))
|
||||
-- selSourceUnpackedness _ = fromSing (sing :: Sing su)
|
||||
-- selSourceStrictness _ = fromSing (sing :: Sing ss)
|
||||
-- selDecidedStrictness _ = fromSing (sing :: Sing ds)
|
||||
-- selName _ = fromMaybe "" (fromSing (sing : Sing mn))
|
||||
-- selSourceUnpackedness _ = fromSing (sing : Sing su)
|
||||
-- selSourceStrictness _ = fromSing (sing : Sing ss)
|
||||
-- selDecidedStrictness _ = fromSing (sing : Sing ds)
|
||||
|
||||
-- | Representable types of kind @*@.
|
||||
-- This class is derivable in DAML with the @DeriveGeneric@ flag on.
|
||||
@ -1359,16 +1359,16 @@ data DecidedStrictness = DecidedLazy
|
||||
-- [DA] we replaced the type family @Rep a@ with a second type parameter of the class @rep@.
|
||||
class Generic a rep | a -> rep where
|
||||
-- | Generic representation type
|
||||
-- type Rep a :: Type -> Type
|
||||
-- type Rep a : Type -> Type
|
||||
-- -- | Convert from the datatype to its representation
|
||||
-- from :: a -> (Rep a) x
|
||||
-- from : a -> (Rep a) x
|
||||
-- -- | Convert from the representation to the datatype
|
||||
-- to :: (Rep a) x -> a
|
||||
-- to : (Rep a) x -> a
|
||||
|
||||
-- | Convert from the datatype to its representation
|
||||
from :: a -> rep x
|
||||
from : a -> rep x
|
||||
-- | Convert from the representation to the datatype
|
||||
to :: rep x -> a
|
||||
to : rep x -> a
|
||||
|
||||
|
||||
-- | Representable types of kind `* -> *` (or kind `k -> *`, when @PolyKinds@
|
||||
@ -1382,17 +1382,17 @@ class Generic a rep | a -> rep where
|
||||
-- 'to1' . 'from1' ≡ 'Prelude.id'
|
||||
-- @
|
||||
-- [DA] we replaced the type family @Rep1 f@ with a second type paremeter of the class @rep@.
|
||||
class Generic1 (f :: * -> Type) rep | f -> rep where
|
||||
class Generic1 (f : * -> Type) rep | f -> rep where
|
||||
-- | Generic representation type
|
||||
-- type Rep1 f :: k -> Type
|
||||
-- type Rep1 f : k -> Type
|
||||
-- -- | Convert from the datatype to its representation
|
||||
-- from1 :: f a -> (Rep1 f) a
|
||||
-- from1 : f a -> (Rep1 f) a
|
||||
-- -- | Convert from the representation to the datatype
|
||||
-- to1 :: (Rep1 f) a -> f a
|
||||
-- to1 : (Rep1 f) a -> f a
|
||||
-- | Convert from the datatype to its representation
|
||||
from1 :: f a -> rep a
|
||||
from1 : f a -> rep a
|
||||
-- | Convert from the representation to the datatype
|
||||
to1 :: rep a -> f a
|
||||
to1 : rep a -> f a
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Meta-data
|
||||
@ -1418,11 +1418,11 @@ data Meta = MetaData MetaData0
|
||||
| MetaCons MetaCons0
|
||||
| MetaSel MetaSel0
|
||||
|
||||
data MetaData0 = MetaData0 {name :: Symbol, module_ :: Symbol, package :: Symbol, isNewType :: Bool}
|
||||
data MetaCons0 = MetaCons0 {name :: Symbol, fixity :: FixityI, hasRecordSelectors :: Bool}
|
||||
data MetaSel0 = MetaSel0 { mbRecordName :: Optional Symbol
|
||||
, sourceUnpackedness :: SourceUnpackedness
|
||||
, sourceStrictness :: SourceStrictness
|
||||
data MetaData0 = MetaData0 {name : Symbol, module_ : Symbol, package : Symbol, isNewType : Bool}
|
||||
data MetaCons0 = MetaCons0 {name : Symbol, fixity : FixityI, hasRecordSelectors : Bool}
|
||||
data MetaSel0 = MetaSel0 { mbRecordName : Optional Symbol
|
||||
, sourceUnpackedness : SourceUnpackedness
|
||||
, sourceStrictness : SourceStrictness
|
||||
}
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
@ -1516,13 +1516,13 @@ data MetaSel0 = MetaSel0 { mbRecordName :: Optional Symbol
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- -- | The singleton kind-indexed data family.
|
||||
-- data family Sing (a :: k)
|
||||
-- data family Sing (a : k)
|
||||
--
|
||||
-- -- | A 'SingI' constraint is essentially an implicitly-passed singleton.
|
||||
-- class SingI (a :: k) where
|
||||
-- class SingI (a : k) where
|
||||
-- -- | Produce the singleton explicitly. You will likely need the @ScopedTypeVariables@
|
||||
-- -- extension to use this method the way you want.
|
||||
-- sing :: Sing a
|
||||
-- sing : Sing a
|
||||
--
|
||||
-- -- | The 'SingKind' class is essentially a /kind/ class. It classifies all kinds
|
||||
-- -- for which singletons are defined. The class supports converting between a singleton
|
||||
@ -1530,14 +1530,14 @@ data MetaSel0 = MetaSel0 { mbRecordName :: Optional Symbol
|
||||
-- class SingKind k where
|
||||
-- -- | Get a base type from a proxy for the promoted kind. For example,
|
||||
-- -- @DemoteRep Bool@ will be the type @Bool@.
|
||||
-- type DemoteRep k :: Type
|
||||
-- type DemoteRep k : Type
|
||||
--
|
||||
-- -- | Convert a singleton to its unrefined version.
|
||||
-- fromSing :: Sing (a :: k) -> DemoteRep k
|
||||
-- fromSing : Sing (a : k) -> DemoteRep k
|
||||
--
|
||||
-- -- Singleton symbols
|
||||
-- data instance Sing (s :: Symbol) where
|
||||
-- SSym :: KnownSymbol s => Sing s
|
||||
-- data instance Sing (s : Symbol) where
|
||||
-- SSym : KnownSymbol s => Sing s
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance KnownSymbol a => SingI a where sing = SSym
|
||||
@ -1545,12 +1545,12 @@ data MetaSel0 = MetaSel0 { mbRecordName :: Optional Symbol
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance SingKind Symbol where
|
||||
-- type DemoteRep Symbol = String
|
||||
-- fromSing (SSym :: Sing s) = symbolVal (Proxy :: Proxy s)
|
||||
-- fromSing (SSym : Sing s) = symbolVal (Proxy : Proxy s)
|
||||
--
|
||||
-- -- Singleton booleans
|
||||
-- data instance Sing (a :: Bool) where
|
||||
-- STrue :: Sing 'True
|
||||
-- SFalse :: Sing 'False
|
||||
-- data instance Sing (a : Bool) where
|
||||
-- STrue : Sing 'True
|
||||
-- SFalse : Sing 'False
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance SingI 'True where sing = STrue
|
||||
@ -1565,9 +1565,9 @@ data MetaSel0 = MetaSel0 { mbRecordName :: Optional Symbol
|
||||
-- fromSing SFalse = False
|
||||
--
|
||||
-- -- Singleton Maybe
|
||||
-- data instance Sing (b :: Maybe a) where
|
||||
-- SNothing :: Sing 'Nothing
|
||||
-- SJust :: Sing a -> Sing ('Just a)
|
||||
-- data instance Sing (b : Maybe a) where
|
||||
-- SNothing : Sing 'Nothing
|
||||
-- SJust : Sing a -> Sing ('Just a)
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance SingI 'Nothing where sing = SNothing
|
||||
@ -1582,16 +1582,16 @@ data MetaSel0 = MetaSel0 { mbRecordName :: Optional Symbol
|
||||
-- fromSing (SJust a) = Just (fromSing a)
|
||||
--
|
||||
-- -- Singleton Fixity
|
||||
-- data instance Sing (a :: FixityI) where
|
||||
-- SPrefix :: Sing 'PrefixI
|
||||
-- SInfix :: Sing a -> Integer -> Sing ('InfixI a n)
|
||||
-- data instance Sing (a : FixityI) where
|
||||
-- SPrefix : Sing 'PrefixI
|
||||
-- SInfix : Sing a -> Integer -> Sing ('InfixI a n)
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance SingI 'PrefixI where sing = SPrefix
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance (SingI a, KnownNat n) => SingI ('InfixI a n) where
|
||||
-- sing = SInfix (sing :: Sing a) (natVal (Proxy :: Proxy n))
|
||||
-- sing = SInfix (sing : Sing a) (natVal (Proxy : Proxy n))
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance SingKind FixityI where
|
||||
@ -1600,10 +1600,10 @@ data MetaSel0 = MetaSel0 { mbRecordName :: Optional Symbol
|
||||
-- fromSing (SInfix a n) = Infix (fromSing a) (I# (integerToInt n))
|
||||
--
|
||||
-- -- Singleton Associativity
|
||||
-- data instance Sing (a :: Associativity) where
|
||||
-- SLeftAssociative :: Sing 'LeftAssociative
|
||||
-- SRightAssociative :: Sing 'RightAssociative
|
||||
-- SNotAssociative :: Sing 'NotAssociative
|
||||
-- data instance Sing (a : Associativity) where
|
||||
-- SLeftAssociative : Sing 'LeftAssociative
|
||||
-- SRightAssociative : Sing 'RightAssociative
|
||||
-- SNotAssociative : Sing 'NotAssociative
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance SingI 'LeftAssociative where sing = SLeftAssociative
|
||||
@ -1622,10 +1622,10 @@ data MetaSel0 = MetaSel0 { mbRecordName :: Optional Symbol
|
||||
-- fromSing SNotAssociative = NotAssociative
|
||||
--
|
||||
-- -- Singleton SourceUnpackedness
|
||||
-- data instance Sing (a :: SourceUnpackedness) where
|
||||
-- SNoSourceUnpackedness :: Sing 'NoSourceUnpackedness
|
||||
-- SSourceNoUnpack :: Sing 'SourceNoUnpack
|
||||
-- SSourceUnpack :: Sing 'SourceUnpack
|
||||
-- data instance Sing (a : SourceUnpackedness) where
|
||||
-- SNoSourceUnpackedness : Sing 'NoSourceUnpackedness
|
||||
-- SSourceNoUnpack : Sing 'SourceNoUnpack
|
||||
-- SSourceUnpack : Sing 'SourceUnpack
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance SingI 'NoSourceUnpackedness where sing = SNoSourceUnpackedness
|
||||
@ -1644,10 +1644,10 @@ data MetaSel0 = MetaSel0 { mbRecordName :: Optional Symbol
|
||||
-- fromSing SSourceUnpack = SourceUnpack
|
||||
--
|
||||
-- -- Singleton SourceStrictness
|
||||
-- data instance Sing (a :: SourceStrictness) where
|
||||
-- SNoSourceStrictness :: Sing 'NoSourceStrictness
|
||||
-- SSourceLazy :: Sing 'SourceLazy
|
||||
-- SSourceStrict :: Sing 'SourceStrict
|
||||
-- data instance Sing (a : SourceStrictness) where
|
||||
-- SNoSourceStrictness : Sing 'NoSourceStrictness
|
||||
-- SSourceLazy : Sing 'SourceLazy
|
||||
-- SSourceStrict : Sing 'SourceStrict
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance SingI 'NoSourceStrictness where sing = SNoSourceStrictness
|
||||
@ -1666,10 +1666,10 @@ data MetaSel0 = MetaSel0 { mbRecordName :: Optional Symbol
|
||||
-- fromSing SSourceStrict = SourceStrict
|
||||
--
|
||||
-- -- Singleton DecidedStrictness
|
||||
-- data instance Sing (a :: DecidedStrictness) where
|
||||
-- SDecidedLazy :: Sing 'DecidedLazy
|
||||
-- SDecidedStrict :: Sing 'DecidedStrict
|
||||
-- SDecidedUnpack :: Sing 'DecidedUnpack
|
||||
-- data instance Sing (a : DecidedStrictness) where
|
||||
-- SDecidedLazy : Sing 'DecidedLazy
|
||||
-- SDecidedStrict : Sing 'DecidedStrict
|
||||
-- SDecidedUnpack : Sing 'DecidedUnpack
|
||||
--
|
||||
-- -- | @since 4.9.0.0
|
||||
-- instance SingI 'DecidedLazy where sing = SDecidedLazy
|
||||
|
@ -48,11 +48,7 @@ xExtensionsSet =
|
||||
-- package imports
|
||||
, PackageImports
|
||||
-- our changes
|
||||
, NewColonConvention
|
||||
, DamlVersionRequired
|
||||
, WithRecordSyntax
|
||||
, DamlTemplate
|
||||
, ImportQualifiedPost
|
||||
, DamlSyntax
|
||||
]
|
||||
|
||||
|
||||
@ -73,7 +69,7 @@ xFlagsSet = [
|
||||
wOptsSet :: [ WarningFlag ]
|
||||
wOptsSet =
|
||||
[ Opt_WarnUnusedImports
|
||||
, Opt_WarnPrepositiveQualifiedModule
|
||||
-- , Opt_WarnPrepositiveQualifiedModule
|
||||
, Opt_WarnOverlappingPatterns
|
||||
, Opt_WarnIncompletePatterns
|
||||
]
|
||||
|
@ -178,10 +178,10 @@ setPackageDbs paths dflags =
|
||||
[PackageDB $ PkgConfFile $ path </> "package.conf.d" | path <- paths] ++ [NoGlobalPackageDB, ClearPackageDBs]
|
||||
, pkgDatabase = if null paths then Just [] else Nothing
|
||||
-- if we don't load any packages set the package database to empty and loaded.
|
||||
, fileSettings = (sFileSettings (settings dflags)){
|
||||
fileSettings_topDir=case paths of p:_ -> p; _ -> error "No package db path available but used $topdir"
|
||||
, fileSettings_systemPackageConfig=case paths of p:_ -> p; _ -> error "No package db path available but used system package config"
|
||||
}
|
||||
, settings = (settings dflags)
|
||||
{sTopDir = case paths of p:_ -> p; _ -> error "No package db path available but used $topdir"
|
||||
, sSystemPackageConfig = case paths of p:_ -> p; _ -> error "No package db path available but used system package config"
|
||||
}
|
||||
}
|
||||
|
||||
setPackageImports :: Bool -> [(String, ModRenaming)] -> DynFlags -> DynFlags
|
||||
|
@ -64,10 +64,10 @@ importDamlPreprocessor = fmap onModule
|
||||
where
|
||||
onModule y = y {
|
||||
GHC.hsmodImports =
|
||||
newImport GHC.QualifiedPost "DA.Internal.Desugar" :
|
||||
newImport GHC.NotQualified "DA.Internal.RebindableSyntax" : GHC.hsmodImports y
|
||||
newImport True "DA.Internal.Desugar" :
|
||||
newImport False "DA.Internal.RebindableSyntax" : GHC.hsmodImports y
|
||||
}
|
||||
newImport :: GHC.ImportDeclQualifiedStyle -> String -> GHC.Located (GHC.ImportDecl GHC.GhcPs)
|
||||
newImport :: Bool -> String -> GHC.Located (GHC.ImportDecl GHC.GhcPs)
|
||||
newImport qual = GHC.noLoc . importGenerated qual . mkImport . GHC.noLoc . GHC.mkModuleName
|
||||
|
||||
-- | We ban people from importing modules such
|
||||
|
@ -51,7 +51,7 @@ onModule x = x { hsmodImports = onImports $ hsmodImports x
|
||||
|
||||
|
||||
onImports :: [LImportDecl GhcPs] -> [LImportDecl GhcPs]
|
||||
onImports = (:) $ noL $ importGenerated QualifiedPost (mkImport $ noL mod_records)
|
||||
onImports = (:) $ noL $ importGenerated True (mkImport $ noL mod_records)
|
||||
|
||||
|
||||
{-
|
||||
|
@ -133,8 +133,8 @@ unpackCStringUtf8 bs = unsafePerformIO $
|
||||
evaluate $ T.unpackCString# a
|
||||
|
||||
-- | This import was generated, not user written, so should not produce unused import warnings
|
||||
importGenerated :: ImportDeclQualifiedStyle -> ImportDecl phase -> ImportDecl phase
|
||||
importGenerated :: Bool -> ImportDecl phase -> ImportDecl phase
|
||||
importGenerated qual i = i{ideclImplicit=True, ideclQualified=qual}
|
||||
|
||||
mkImport :: Located ModuleName -> ImportDecl GhcPs
|
||||
mkImport mname = GHC.ImportDecl GHC.NoExt GHC.NoSourceText mname Nothing False False NotQualified False Nothing Nothing
|
||||
mkImport mname = GHC.ImportDecl GHC.NoExt GHC.NoSourceText mname Nothing False False False False Nothing Nothing
|
||||
|
@ -422,6 +422,9 @@ goToDefinitionTests mbScenarioService = Tasty.testGroup "Go to definition tests"
|
||||
expectGoToDefinition (foo,2,[6..13]) (In "Prelude") -- "Optional"
|
||||
expectGoToDefinition (foo,2,[16..19]) (In "GHC.Types") -- "List"
|
||||
expectGoToDefinition (foo,2,[21..24]) (In "GHC.Types") -- "Bool"
|
||||
{-
|
||||
-- Disabled for now. See issue
|
||||
-- https://github.com/digital-asset/daml/issues/1582
|
||||
, testCase' "Cross-package goto definition" $ do
|
||||
foo <- makeModule "Foo"
|
||||
[ "test = scenario do"
|
||||
@ -431,6 +434,7 @@ goToDefinitionTests mbScenarioService = Tasty.testGroup "Go to definition tests"
|
||||
setFilesOfInterest [foo]
|
||||
expectNoErrors
|
||||
expectGoToDefinition (foo, 3, [7..14]) (In "DA.Internal.LF")
|
||||
-}
|
||||
]
|
||||
where
|
||||
testCase' = testCase mbScenarioService
|
||||
|
@ -50,9 +50,21 @@ git submodule update --init --recursive
|
||||
stack build --stack-yaml=hadrian/stack.yaml --only-dependencies
|
||||
hadrian/build.stack.sh --configure --flavour=quickest -j
|
||||
```
|
||||
The compiler is built to `_build/stage1/bin/ghc`.
|
||||
Note that the `git checkout` step will put you in detached HEAD state - that's expected. The compiler is built to `_build/stage1/bin/ghc`.
|
||||
|
||||
Note that the `git checkout` step will put you in detached HEAD state - that's expected.
|
||||
The equivalent commands to build the `8.8.1` compatible branch are:
|
||||
```
|
||||
git clone https://gitlab.haskell.org/ghc/ghc.git
|
||||
cd ghc
|
||||
git fetch --tags
|
||||
git checkout ghc-8.8.1-alpha1
|
||||
git remote add upstream git@github.com:digital-asset/ghc.git
|
||||
git fetch upstream
|
||||
git merge --no-edit upstream/da-master-8.8.1
|
||||
git submodule update --init --recursive
|
||||
stack build --stack-yaml=hadrian/stack.yaml --only-dependencies
|
||||
hadrian/build.stack.sh --configure --flavour=quickest -j
|
||||
```
|
||||
|
||||
## How to build `ghc-lib` from the DA GHC fork
|
||||
(You don't need to follow the previous step in order to do this.)
|
||||
@ -77,6 +89,24 @@ stack exec -- ghc-lib-gen ghc --ghc-lib-parser
|
||||
```
|
||||
Note that the `git checkout` step will put you in detached HEAD state - that's expected.
|
||||
|
||||
The equivalent 8.8.1 commands are:
|
||||
```
|
||||
mkdir -p ~/tmp && cd ~/tmp
|
||||
git clone git@github.com:digital-asset/ghc-lib.git
|
||||
cd ghc-lib && git clone https://gitlab.haskell.org/ghc/ghc.git
|
||||
cd ghc
|
||||
git fetch --tags
|
||||
git checkout ghc-8.8.1-alpha1
|
||||
git remote add upstream git@github.com:digital-asset/ghc.git
|
||||
git fetch upstream
|
||||
git merge --no-edit upstream/da-master-8.8.1 upstream/da-unit-ids-8.8.1
|
||||
git submodule update --init --recursive
|
||||
cd ..
|
||||
stack setup > /dev/null 2>&1
|
||||
stack build --no-terminal --interleaved-output
|
||||
stack exec -- ghc-lib-gen ghc --ghc-lib-parser
|
||||
```
|
||||
|
||||
2. Edit `~/tmp/ghc-lib/ghc/ghc-lib-parser.cabal` to (a) change the version number (we use a datestamp, e.g. `0.20190219`) and (b) add clause `extra-libraries:ffi` to the `library` stanza. Then run:
|
||||
```bash
|
||||
cat << EOF >> stack.yaml
|
||||
|
Loading…
Reference in New Issue
Block a user