Questa è una domanda imbarazzante di base, ma fino a poco tempo fa ho evitato di comprendere correttamente l'IO in Haskell e ora ho bisogno di farlo.
Sto scrivendo (con qualcun altro) un programma che prende come parte del suo input una libreria di dati di background. Quindi come parte di main avrò un paio di righe come
lib <- library.txt
let library = interpret lib
Cioè, legge la libreria da un file di testo e poi la analizza per creare una libreria con la struttura giusta necessaria per il programma. In particolare, il tipo di "interpretare" sarà
interpret :: String -> Library
La mia domanda ora è questa. C'è un modo per il programma di trattare la libreria come una costante? Il programma conterrà funzioni il cui comportamento dipende da cosa c'è nella libreria, quindi sembra che si debba dare una funzione di questo tipo come
foo :: Library -> Type1 -> Type2
e includi sempre library come uno degli argomenti di foo . Ma è un po 'noioso quando foo sarà sempre applicato solo a library e non ad altre librerie di tipo Library . Mi piacerebbe essere in grado di trattare library come farei con una costante come 2 (l'analogia è che la funzione che prende da x a x + 2, ad esempio, ha tipo Int -> Int piuttosto che Int -> Int -> Int ). Funzionerà se invece dò a foo il tipo Type1 -> Type2 e poi consenti la definizione di foo x per menzionare library ? In caso contrario, c'è un altro modo per ottenere la stessa cosa?