Gibt es eine Haskell-Sprachenerweiterung für die Typklassenmethode "die einzige mögliche verfügbare Instanz zu verwenden"?Wählen Sie die Standardinstanz unter mehrdeutigen Typen
Ich möchte folgendes
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
class Foo a r where
foo :: a -> r
instance Foo a (Bool -> a) where
foo x _ = x
-- This compiles
-- bar :: Int -> Bool
-- This does not
bar :: a -> Bool
bar _ = True
use :: Bool
use = bar $ foo _5 True
where
_5 :: Int
_5 = 5
Jetzt kompilieren bekomme ich die folgende Fehlermeldung:
No instance for (Foo Int (Bool -> r0))
(maybe you haven't applied enough arguments to a function?)
arising from a use of ‘foo’
The type variable ‘r0’ is ambiguous
Note: there is a potential instance available:
instance Foo a (Bool -> a) -- Defined at tests/pos/Fixme.hs:9:10
Aber da gibt es nur eine mögliche Instanz verfügbar ist, ist es eine Möglichkeit, ghc zu zwingen, zu verwenden, diese Instanz? Oder gibt es eine Möglichkeit, eine Instanz als eine Standardinstanz zu deklarieren, wenn Typen nicht eindeutig sind?
Diese typeclass + -Instanz lässt mich zusammenzucken. Sind Sie sicher, dass Sie hier das Richtige sagen? –