这是一个代表现实世界物理单元的数据类型:
import qualified Prelude as P
import Prelude hiding ((+), (*), (/), (-), Int, pi)
data Int = Zero | Succ Int | Pred Int
data Unit :: Int -> Int -> Int -> * where
U :: Double -> Unit m s kg
(+) :: Unit m s kg -> Unit m s kg -> Unit m s kg
(-) :: Unit m s kg -> Unit m s kg -> Unit m s kg
(*) :: Unit m1 s1 kg1 -> Unit m2 s2 kg2 -> Unit (Plus m1 m2) (Plus s1 s2) (Plus kg1 kg2)
(/) :: Unit m1 s1 kg1 -> Unit m2 s2 kg2 -> Unit (Minus m1 m2) (Minus s1 s2) (Minus kg1 kg2)
和 Show 实例:
instance Show (Unit m s kg) where
show (U a) = show a
这样,我只能显示值而不显示类型(是时间还是速度或长度类型)。我想知道如何获取类型参数m,s,kg然后显示它?
完整的代码在这里。