Chcę osiągnąć coś podobnego do ograniczonych tablic w standardowym pakiecie tablicowym, ale używając tablic repa.Repa tablice indeksowane przez ograniczony typ danych?
Jaki jest miły i czysty sposób, aby to osiągnąć?
To co próbowałem, ale nie musi być lepszy sposób niż zawijania wszystko w funkcji niestandardowych sprawdzić granice:
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)))
także starałem się czerpać instancji kształt (SH. C), ale bezskutecznie, nie mogę naprawdę zrozumieć, jak zaimplementować niektóre interfejsy zadeklarowane w klasie Shape dla mojego typu danych. Piszę to pytanie z nadzieją, że ktoś inny ma sposób, ale jeśli nie, spróbuję jeszcze raz. Dziękuję Ci!
będę spojrzeć na to. – user1105045