Toon posts:

[Haskell] newArray_ in instance

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een instance van MArray creëren, maar de newArray_ kan ik niet goed definiëren.

Dit is mijn functie newArray_. Ik probeer hier 2 keer zoveel ruimte te maken.

code:
1
2
3
datatype Foo = Foo Int Int
instance MArray IOUArray Foo IO where
             newArray_ x  =  newArray_ (fst x,snd x+snd x)


Dit is de error:

Compiling Try ( try.hs, interpreted )

try.hs:41:
Could not deduce (Num i)
from the context (MArray IOUArray Foo IO,
HasBounds IOUArray,
Monad IO,
Ix i)
Probable fix:
Add (Num i) to the class or instance method `newArray_'
arising from use of `+' at try.hs:41
In the first argument of `newArray_', namely
`(fst x, (snd x) + (snd x))'
In the definition of `newArray_':
newArray_ (fst x, (snd x) + (snd x))
Failed, modules loaded: none.

Ik heb al op heel veel manier geprobeerd iets met die probable fix te doen, maar het blijft simpelweg niet werken.

P.S. Weet iemand misschien waar ik ergens documentatie over unsafeWrite en unsafeRead kan vinden? Ik heb daar al wel de functies voor mijn instance voor geschreven, maar in de documentatie van GHC kan ik daar niets over vinden.

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
en als je er nou dit van maakt:
code:
1
2
3
4
datatype Foo = Foo Int Int
instance MArray IOUArray Foo IO where
    newArray_ :: (Ix i,Num i) => (i,i) -> IO (IOUArray i Foo)
    newArray_ x  =  newArray_ (fst x,snd x+snd x)

wat voor foutmelding krijg je dan?

Pas de replâtrage, la structure est pourrie.


Verwijderd

Topicstarter
try.hs:41:
Misplaced type signature:
newArray_ ::
forall i. (Ix i, Num i) => (i, i) -> IO (IOUArray i Foo)
Failed, modules loaded: none.
Prelude>

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
datatype is trouwens data, maar dat zal wel een typefout zijn :)
probeer eens een instance van Num voor Foo te maken.

Pas de replâtrage, la structure est pourrie.


Verwijderd

Topicstarter
Apollo_Futurae schreef op 20 May 2003 @ 22:58:
datatype is trouwens data, maar dat zal wel een typefout zijn :)
probeer eens een instance van Num voor Foo te maken.
Waarom? Wat zou ik daar dan neer moeten zetten? Het is niet zo dat ik twee Foo's bijelkaar zal gaan optellen of iets dergelijks.

Ik had het volgende al geprobeerd:
Foo enz
deriving(Show, Num)

Maar dat werkte ook al niet.

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
is Foo het elementtype? dan hoeft dat inderdaad geen Num te zijn.

het probleem is dat jouw implementatie van newArray_ vanwege het gebruik van (+) vereist dat het indextype i een Num is, terwijl dit helemaal niet zo hoeft te zijn.

je zult dus moeten kiezen: of je maakt geen gebruik van MArray, of je moet een implementatie verzinnen die met elke Ix kan werken.

[ Voor 23% gewijzigd door Apollo_Futurae op 21-05-2003 20:04 . Reden: toevoeging ]

Pas de replâtrage, la structure est pourrie.

Pagina: 1