Согласно https://hackage.haskell.org/package/ConfigFile-1.0.5/docs/Data-ConfigFile.html, пакет преобразует значение в config. файл в Bool. Следующий код:
{-# LANGUAGE FlexibleContexts #-}
import qualified Data.ConfigFile as DC
import qualified Control.Monad.Except as CME
-- | The foundation object
data JRState = JRState {
secureOnly :: Bool -- ^ restrict connections to HTTPS
}
main :: IO ()
main = (CME.runExceptT $ pipe (JRState False)) >>= estate
estate :: Show t => Either t JRState -> IO ()
estate (Right state) = return ()
estate (Left err) = do
putStrLn $ "<<" ++ show err ++ ">>"
return ()
pipe :: (CME.MonadError DC.CPError m, CME.MonadIO m) => JRState -> m JRState
pipe site = do
cp <- CME.join $ CME.liftIO $ return $ DC.readstring DC.emptyCP{DC.optionxform=id} "secureSession = True\n"
DC.get cp "DEFAULT" "secureSession" >>= return . nubb where
nubb (Left err) = error err
nubb (Right value) = site{secureOnly = value}
при запуске производит
‹‹(ParseError "не удалось проанализировать значение True из (DEFAULT/secureSession)", "genericget")>>
что, очевидно, произошло из-за состояния putStrLn. Но я ожидаю, что извлечение значения в канале и куске (я знаю, глупые имена) вызовет логический контекст и, таким образом, вызовет преобразование строки True в Bool. Я пробовал 1 и Да с тем же результатом. В чем дело?