Esiste una lingua imperativa con un sistema di tipo Haskell? [chiuso]

6

Ho cercato di imparare Haskell un paio di volte negli ultimi anni e, forse perché conosco principalmente i linguaggi di scripting, la funzionalità di esso mi ha sempre infastidito (le monadi sembrano un gran casino per fare un sacco di I / O). Tuttavia, penso che il sistema di tipo sia perfetto .

Leggendo una guida ai tipi e alle typeclass di Haskell (come this ), non vedo davvero un motivo per cui richiederebbero un linguaggio funzionale e inoltre sembrerebbero perfetti per un linguaggio orientato agli oggetti di livello industriale (come Java). Tutto questo solleva la domanda: qualcuno ha mai preso il sistema di scrittura di Haskell e ha fatto un imperativo, con il linguaggio OOP?

Se è così, voglio usarlo.

    
posta Graham Kaemmer 10.06.2014 - 16:50
fonte

1 risposta

6

Dipende dalla tua definizione di OOP, che ovviamente è diversa da quella di tutti gli altri. Ma per quello che vale, Standard ML ha un sistema di moduli che è più potente di quello di Haskell - in Haskell puoi solo istanziare una classe di caratteri una volta, mentre in SML posso ordinare gli interi tramite il loro ordinamento tradizionale, o per divisibilità, o qualsiasi numero di altri modi che mi piacciono SML non è orientato agli oggetti, nel senso che non ha uno zucchero di sintassi incorporato per gli oggetti, ma può ancora essere fatto. Ma non è puramente funzionale - non ti costringerà a separare gli effetti collaterali dal codice puro se non lo desideri. OCaml e F # sono dialetti SML che hanno un sistema di oggetti. F # in particolare potrebbe interessarti dal momento che funziona su .NET e interagisce con C #.

C'è anche Scala, che è più "linguaggio orientato agli oggetti di livello industriale" e meno simile a SML, ma ha ancora caratteristiche di linguaggi simili a SML come la corrispondenza di modelli e tipi di dati algebrici e interagisce con Java. Potresti anche essere interessato a Go, che è la lingua meno familiare, ma se ricordo correttamente ha sottotipizzazione strutturale (cioè non dichiarare interfacce frontalmente, avere le interfacce giuste è sufficiente) come il sistema modulare di Standard ML.

    
risposta data 10.06.2014 - 16:59
fonte