19
私は、標準的な配列パッケージの境界付き配列に似た何かを実現するが、repa配列を使用したい。バインドされたデータ型でインデックスされたRepa配列?
これを達成するうえで、どのような良い方法がありますか?
これは私が試したものですが、境界を確認するカスタム関数のすべてを包むよりも良い方法がなければならない:
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