Ho scritto un certo codice in Haskell per la modellazione logica proposizionaleestensione logica proposizionale alla logica modale in Haskell
data Formula = Prop {propName :: String}
| Neg Formula
| Conj Formula Formula
| Disj Formula Formula
| Impl Formula Formula
| BiImpl Formula Formula
deriving (Eq,Ord)
Tuttavia, non v'è alcun modo naturale per estendere questo al modale logica, dal momento che il tipo di dati è chiuso. Pertanto, ho pensato di utilizzare invece le classi. In questo modo, posso aggiungere facilmente nuove funzionalità linguistiche in diversi moduli in seguito. Il problema è che non so esattamente come scriverlo. Vorrei qualcosa di simile al seguente
type PropValue = (String,Bool) -- for example ("p",True) states that proposition p is true
type Valuation = [PropValue]
class Formula a where
evaluate :: a -> Valuation -> Bool
data Proposition = Prop String
instance Formula Proposition where
evaluate (Prop s) val = (s,True) `elem` val
data Conjunction = Conj Formula Formula -- illegal syntax
instance Formula Conjunction where
evaluate (Conj φ ψ) v = evaluate φ v && evaluate ψ v
L'errore è ovviamente nella definizione di Congiunzione. Tuttavia, non è chiaro per me come potrei riscriverlo in modo che funzioni.
Se ti piace leggere, si possono trovare [questo] (http://okmij.org/ftp/tagless-final/course/lecture .pdf) utile. – user2407038