3

これは、実世界の物理単位を表すデータ型です。

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 を取得して表示する方法を知りたいですか?

完全なコードはこちらです。

4

1 に答える 1