@@ -114,13 +114,22 @@ launchHaskellLanguageServer parsedArgs = do
114
114
callProcess e args
115
115
#else
116
116
let Cradle { cradleOptsProg = CradleAction { runGhcCmd } } = cradle
117
- (CradleSuccess ghcBinary) <- fmap trim <$> runGhcCmd [" -v0" , " -package-env=-" , " -e" , " putStr =<< System.Environment.getExecutablePath" ]
118
- (CradleSuccess libdir) <- HieBios. getRuntimeGhcLibDir cradle
117
+ -- we need to be compatible with NoImplicitPrelude
118
+ ghcBinary <- (fmap trim <$> runGhcCmd [" -v0" , " -package-env=-" , " -e" , " do e <- System.Environment.getExecutablePath ; System.IO.putStr e" ])
119
+ >>= cradleResult " Failed to get project GHC executable path"
120
+ libdir <- HieBios. getRuntimeGhcLibDir cradle
121
+ >>= cradleResult " Failed to get project GHC libdir path"
119
122
env <- Map. fromList <$> getEnvironment
120
123
let newEnv = Map. insert " GHC_BIN" ghcBinary $ Map. insert " GHC_LIBDIR" libdir env
121
124
executeFile e True args (Just (Map. toList newEnv))
122
125
#endif
123
126
127
+
128
+ cradleResult :: String -> CradleLoadResult a -> IO a
129
+ cradleResult _ (CradleSuccess a) = pure a
130
+ cradleResult str (CradleFail e) = die $ str ++ " : " ++ show e
131
+ cradleResult str CradleNone = die $ str ++ " : no cradle"
132
+
124
133
-- | Version of 'getRuntimeGhcVersion' that dies if we can't get it, and also
125
134
-- checks to see if the tool is missing if it is one of
126
135
getRuntimeGhcVersion' :: Show a => Cradle a -> IO String
@@ -134,12 +143,7 @@ getRuntimeGhcVersion' cradle = do
134
143
Direct -> checkToolExists " ghc"
135
144
_ -> pure ()
136
145
137
- ghcVersionRes <- HieBios. getRuntimeGhcVersion cradle
138
- case ghcVersionRes of
139
- CradleSuccess ver -> do
140
- return ver
141
- CradleFail error -> die $ " Failed to get project GHC version:" ++ show error
142
- CradleNone -> die " Failed get project GHC version, since we have a none cradle"
146
+ HieBios. getRuntimeGhcVersion cradle >>= cradleResult " Failed to get project GHC version"
143
147
where
144
148
checkToolExists exe = do
145
149
exists <- findExecutable exe
0 commit comments