La biblioteca linear
esporta un'istanza di Num a => Num (V3 a)
, quindi si può effettivamente fare solo
> point * 2
V3 2 4 6
Se si utilizza GHCi, si può vedere che cosa significa per 2 :: V3 Int
:
> 2 :: V3 Int
V3 2 2 2
Così l'attuazione di fromInteger
per V3
apparirebbe
fromInteger n = V3 n' n' n' where n' = fromInteger n
Questo significa che è possibile fare cose come
> point + 2
V3 3 4 5
> point - 2
V3 (-1) 0 1
> abs point
V3 1 2 3
> signum point
V3 1 1 1
> negate point
V3 (-1) (-2) (-3)
V3
implementa anche Fractional
, così si dovrebbe essere in grado di utilizzare /
e co. quando il tuo punto contiene valori Fractional
. Tuttavia, l'uso di fmap
è più generale, è possibile convertire il vostro V3 Int
in V3 String
, ad esempio:
> fmap show point
V3 "1" "2" "3"
La funzione fmap
consente di applicare una funzione di tipo a -> b
ad un V3 a
per ottenere un V3 b
senza alcuna restrizione sul tipo di output (necessariamente così). L'utilizzo di fmap
non è sbagliato, non è semplicemente leggibile quanto l'utilizzo dei normali operatori aritmetici. La maggior parte degli Haskellers non avrebbe problemi a leggerlo, tuttavia, fmap
è uno strumento molto generale che si presenta per quasi tutti i tipi là fuori.
Il pacchetto ['linear'] (https://hackage.haskell.org/package/linear-1.16) non esporta' Data.Linear', puoi collegarti alla libreria che stai utilizzando? – bheklilr
Woops, era un errore di battitura. Grazie. – MaiaVictor
https://hackage.haskell.org/package/linear-1.20.7/docs/Linear-Vector.html#v:scaled – SwiftsNamesake