Supponiamo che io sono un po 'generica funzioneFornire un corpo funzione diversa per una generica funzione in base al tipo
genericFunc :: a -> b
genericFunc x = doSomeHardWork
Ma per un determinato tipo, c'è un modo molto più efficiente che genericFunc
si poteva fare.
genericFunc :: ParticularType -> b
genericFunc x = doSomeEasyWork
Qual è il modo migliore per combinare questi due corpi di funzione nella stessa genericFunc
, in modo tale che quando viene utilizzato su ParticularType
, sarà doSomeEasyWork
, ma quando viene utilizzato su altri tipi, sarà doSomeHardWork
? Sto specificatamente escludendo l'opzione di utilizzare un nome diverso o moduli diversi.
Credo che questo possa essere fatto con un typeclass, ma sono più interessato alle soluzioni che usano la direttiva del linguaggio. Ho una vaga idea che questo possa essere fatto con le indicazioni del linguaggio, ma non ho idea di come. Punti bonus se confronti e confronti questi approcci e/o altri possibili approcci.
vagamente ispirato a pensare a questa domanda: [Se qualcosa non è un elenco] (http://stackoverflow.com/questions/ 8463777/if-something-is-not-a-list-in-haskell) –