www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

fweth

Gepostet:
05.09.2010 01:21

Drei kleine Einsteigerfragen  
Hallo! Ich versuche gerade Haskell zu lernen und stehe ein wenig bei den Klassen und Typen an. Ich habe drei kleine Fragen:

1.

Warum funktioniert der Code

class Test a where
id :: a -> a
id a = a

instance Num a => Test [a]

so schon, aber nicht mit "... Test a" in der letzten Zeile? Warum kann ich nicht direkt alle Instanzen einer Klasse zu Instanzen einer anderen Klasse machen, aber trotzem alle Instanzen eines polymorphen Typen?

2.

Ich habe mal in einem Code eine Syntax in der Art von

test :: a -> b a

gesehen. Der Compiler nimmt sowas auch an, aber ich habe nirgends herausgefunden wie das zu lesen ist.

3.

Nochmal ein ähnlicher Code wie im ersten Beispiel:

class Test a where
id :: a -> a
id a = a

instance Test Int

Nun bekomme ich bei der Eingabe "id 5" den Fehler "Unresolved overloading". Mir ist klar dass "5" nicht von Typ Int ist sondern es sich dabei um eine polymorphe Konstante handelt. Aber ist das nicht trotzdem der selbe Fall bei dem Operator (/)? Der Typ von (/) ist Fractional a => a -> a -> a und bei der Eingabe 5/5 bekomme ich ein Ergebnis. Das macht auch Sinn, weil alle Instanzen von Fractional auch Instanzen von Num sind, und 5 von der Klasse Num ist. Aber sollte ich dann nicht mit einer ähnlichen Argumentation auch bei "id 5" ein Ergebnis bekommen, weil Int eine Instanz von Num ist?

Würde mich freuen, wenn Ihr mir ein wenig helfen könnt, in Hasell besser reinzukommen.
Zum Seitenanfang    
 
fweth

Gepostet:
08.09.2010 11:34

   
OK, den zweiten Punkt habe ich mir mittlerweile beantworten können (: aber die anderen beiden noch nicht.
Zum Seitenanfang    
 
Landei

Gepostet:
21.01.2011 10:12

   
Deine Probleme kommen daher, dass die Funktion id schon definiert ist: http://www.haskell.org/hoogle/?hoogle=id

Benenne sie in irgend etwas anderes um (z.B. identity) bevor du weiter rumprobierst.
Zum Seitenanfang