Sto leggendo il codice sorgente di Data.Map e trovo che!() È utilizzato nel costruttore di dati di data Map k a
.Cosa significa!() Nel costruttore di dati?
data Map k a = Tip
| Bin {-# UNPACK #-} !Size !k a !(Map k a) !(Map k a)
Trovo che il !()
non influisce sul modo l'abbinamento Patten contro i dati. Nella funzione di mapWithKey, la corrispondenza del patten è ancora per 5 cose. Quindi non lo considero un operatore.
mapWithKey f (Bin sx kx x l r)
Dopo googleing, ho trovato che il !()
possono essere correlati a -XBangPatterns
che viene utilizzato per evalution artificiale. Ho ragione ? O è per un altro scopo?
Grazie per la risposta. Oh, quindi mi sbaglio completamente? Non è per una valutazione pigra, ma per valutare i valori degli argomenti. Ma non sono sicuro del motivo per cui il pacchetto impone la rigidità sulla mappa. Senza la rigidità, possiamo ancora fare la ricerca, mappatura quando stiamo andando attraverso l'albero della mappa – code4j
'Data.Map' è spin-string per l'efficienza. In realtà, l'efficienza è la ragione principale per cui le persone di solito si preoccupano di aggiungere rigore. – shachaf
Grazie per la spiegazione :) – code4j