19
我想要實現類似於標準數組包中的有界數組,但使用了數組。修復由有界數據類型索引的數組?
什麼是實現這一目標的好方法?
這是我嘗試過,但必須有比包裝的定製功能所需的一切更好的方式,檢查範圍:
import Data.Array.Repa
data C = A | F | L deriving (Eq,Enum,Ord,Bounded,Show)
data Ballot c = Ballot {
vote::Array U (Z :. Int) Int
} deriving Show
mkBallot::(Eq c ,Enum c,Ord c, Bounded c, Show c) => c -> Ballot c
mkBallot c = Ballot $ fromListUnboxed (Z :. max) (genSc c)
where
max = (fromEnum (maxBound `asTypeOf` c)) + 1
genSc::(Eq c,Enum c,Ord c,Bounded c,Show c) => c -> [Int]
genSc c = [ f x | x <- enumFrom (minBound `asTypeOf` c) , let f v = if x == c then 1 else 0]
showScore c b = index (vote b) (Z :. ((fromEnum c)))
我也試圖推導(SH Shape實例:C )但無濟於事,我無法真正瞭解如何實現Shape類中爲我的數據類型聲明的一些接口。我正在寫這個問題,希望別人有辦法,但如果沒有,我會再試一次。謝謝!
我會看看這個。 – user1105045