Ich arbeite an einem Haskell-Projekt, in dem sich die Einstellungen derzeit in einer Datei mit der Bezeichnung Setting.hs
befinden. Daher werden sie während der Kompilierungszeit überprüft und können global abgerufen werden.Von der statischen Konfiguration zur dynamischen Konfiguration wechseln
Da dies jedoch ein bisschen zu statisch ist, überlegte ich, die Konfiguration während der Laufzeit zu lesen. Die Codebasis ist riesig und es scheint, es wäre ein beträchtlicher Aufwand, die Einstellung z.B. als Argument durch den gesamten Programmablauf, da auf sie von irgendwoher beliebig zugegriffen werden kann.
Gibt es Entwurfsmuster, Bibliotheken oder sogar Ghc-Erweiterungen, die hier helfen können, ohne den gesamten Code zu refaktorieren?
Implizite Argumente oder Reader-Monade sind allgemeine Wahl, aber sie erfordern einige Änderungen. – chi
Werfen Sie einen Blick auf [Implizite Konfigurationen - oder, geben Sie Klassen die Werte von Typen wider (http://okmij.org/ftp/Haskell/types.html#Prepose), wenn es helfen könnte. –
Erweiterung auf @Petr Pudlák Kommentar, eine Implementierung von impliziten Konfigurationen finden Sie im Paket "Reflection". Im Beispielordner aus dem Repo gibt es ein "leserähnliches" Beispiel, das relevant erscheint: https://github.com/ekmett/reflection/blob/master/examples/ReaderLike.hs. Siehe auch diese SO-Antwort für ein Anwendungsbeispiel: http://stackoverflow.com/a/29929718/1364288 – danidiaz