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