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?