<div dir="ltr">Hi,<div><br></div><div>I refactored it as such:</div><div><br></div><div><div>apply_listd []        d x = d x</div><div>apply_listd ((a,b):t) d x =</div><div>  case compare x a of</div><div>    EQ -> a</div><div>    GT -> b</div><div>    _  -> d x</div><div><br></div><div>applyd f d x = look f</div><div>  where</div><div>    k = 5</div><div><br></div><div>    look (Leaf h l)</div><div>      | h == k = apply_listd l d x</div><div>    look (Branch p b l r)</div><div>      | (k `xor` p) .&. (b - 1) == 0 = look (if k .&. b == 0 then l else r)</div><div>    look _ = d x</div><div><br></div><div>...and it compiled so i'm not sure what happened there. Simpler though: adding the type signature</div><div><br></div><div><div>applyd :: Ord a => Func a b -> (a -> b) -> a -> b</div></div><div><br></div><div class="gmail_extra">also made it compile. I'm not sure why ghc thinks there's multiple instances to choose from (somebody please explain), but in any case adding type signatures will give you better error messages/help ghc.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Hope that helps a bit.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_quote">On Sun, Jan 29, 2017 at 4:00 AM,  <span dir="ltr"><<a href="mailto:beginners-request@haskell.org" target="_blank">beginners-request@haskell.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Send Beginners mailing list submissions to<br>
        <a href="mailto:beginners@haskell.org">beginners@haskell.org</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/beginners</a><br>
or, via email, send a message with subject or body 'help' to<br>
        <a href="mailto:beginners-request@haskell.org">beginners-request@haskell.org</a><br>
<br>
You can reach the person managing the list at<br>
        <a href="mailto:beginners-owner@haskell.org">beginners-owner@haskell.org</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of Beginners digest..."<br>
<br>
<br>
Today's Topics:<br>
<br>
   1.  Ambiguous type variable prevents the constraint  `(Ord t0)'<br>
      from being solved. (Ivan Kush)<br>
<br>
<br>
------------------------------<wbr>------------------------------<wbr>----------<br>
<br>
Message: 1<br>
Date: Sat, 28 Jan 2017 23:09:09 +0300<br>
From: Ivan Kush <<a href="mailto:ivan.v.kush@yandex.ru">ivan.v.kush@yandex.ru</a>><br>
To: <a href="mailto:beginners@haskell.org">beginners@haskell.org</a><br>
Subject: [Haskell-beginners] Ambiguous type variable prevents the<br>
        constraint      `(Ord t0)' from being solved.<br>
Message-ID: <<a href="mailto:5152611485634149@web34j.yandex.ru">5152611485634149@web34j.<wbr>yandex.ru</a>><br>
Content-Type: text/plain; charset=utf-8<br>
<br>
I get this error (full message at the end of the mail). How could I correct my code?<br>
<br>
<br>
===================<br>
Code:<br>
===================<br>
<br>
module Intro where<br>
<br>
import Data.Bits --  for xor, .&.<br>
<br>
data Func a b<br>
    = Empty<br>
    | Leaf Int [(a, b)]<br>
    | Branch Int Int (Func a b) (Func a b)<br>
<br>
applyd =<br>
    let apply_listd l d x =<br>
                    case l of<br>
                        [] -> d x<br>
                        (a, b) : t -><br>
                            let c = compare x a<br>
                            in if c == EQ then b<br>
                                else if c == GT then apply_listd t d x<br>
                                else d x<br>
<br>
     in  \f d x -><br>
        let k =  5 -- hash x - todo<br>
        in let look t =<br>
                case t of<br>
                    Leaf h l | h == k -><br>
                        apply_listd l d x<br>
                    Branch p b l r | (k `xor` p) .&. (b - 1) == 0 -> --  (Branch p b l r) | ((k xor p) .&. (b - 1)) == 0 -><br>
                        look (if k .&. b == 0 then l else r)<br>
                    _ -> d x<br>
           in look f<br>
<br>
<br>
<br>
===================<br>
Error:<br>
===================<br>
<br>
Intro.hs:37:25: error:<br>
    * Ambiguous type variable `t0' arising from a use of `apply_listd'<br>
      prevents the constraint `(Ord t0)' from being solved.<br>
      Relevant bindings include<br>
        l :: [(t0, t)] (bound at Intro.hs:36:28)<br>
        t :: Func t0 t (bound at Intro.hs:34:21)<br>
        look :: Func t0 t -> t (bound at Intro.hs:34:16)<br>
        x :: t0 (bound at Intro.hs:32:15)<br>
        d :: t0 -> t (bound at Intro.hs:32:13)<br>
        f :: Func t0 t (bound at Intro.hs:32:11)<br>
        (Some bindings suppressed; use -fmax-relevant-binds=N or -fno-max-relevant-binds)<br>
      Probable fix: use a type annotation to specify what `t0' should be.<br>
      These potential instances exist:<br>
        instance Ord Ordering -- Defined in `GHC.Classes'<br>
        instance Ord Integer<br>
          -- Defined in `integer-gmp-1.0.0.1:GHC.<wbr>Integer.Type'<br>
        instance Ord a => Ord (Maybe a) -- Defined in `GHC.Base'<br>
        ...plus 22 others<br>
        ...plus five instances involving out-of-scope types<br>
        (use -fprint-potential-instances to see them all)<br>
    * In the expression: apply_listd l d x<br>
      In a case alternative: Leaf h l | h == k -> apply_listd l d x<br>
      In the expression:<br>
        case t of {<br>
          Leaf h l | h == k -> apply_listd l d x<br>
          Branch p b l r<br>
            | (k `xor` p) .&. (b - 1) == 0<br>
            -> look (if k .&. b == 0 then l else r)<br>
          _ -> d x }<br>
<br>
<br>
-- <br>
Best wishes,<br>
Ivan Kush<br>
<br>
<br>
------------------------------<br>
<br>
Subject: Digest Footer<br>
<br>
______________________________<wbr>_________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/beginners</a><br>
<br>
<br>
------------------------------<br>
<br>
End of Beginners Digest, Vol 103, Issue 25<br>
******************************<wbr>************<br>
</blockquote></div><br></div></div></div>