On 26.07.2010 23:55, Ozgur Akgun wrote:
I think it is pretty cool as well. But I think there is a problem with
viewing it as a wildcard.

let's say we define the following:

(??) = flip

foo :: a -> b -> c
foo ?? x :: a -> c

Perfect!

But saying ?? can be used as a wildcard might in the following wrong
perception:

foo x ?? :: b -> c -- WRONG

This looks interesting. I played around with this for a bit:


{-# LANGUAGE MultiParamTypeClasses
           , FunctionalDependencies
           , FlexibleInstances
           #-}

class Wildcard f v r | f -> v r where
    (??) :: f -> v -> r

instance Wildcard (a -> b -> c) b (a -> c) where
    (??) = flip

instance Wildcard (b -> c) b c where
    (??) = id

f :: String -> Int -> String
f s i = s ++ show i

a :: String -> String
a = (f ?? 5)

b :: Int -> String
b = (f "Int: " ??)



Sadly, this won't typecheck:


pattern.hs:19:0:
    Couldn't match expected type `Int' against inferred type `[Char]'
      Expected type: Int
      Inferred type: String
    When using functional dependencies to combine
      Wildcard (b -> c) b c,
        arising from the dependency `f -> a r'
        in the instance declaration at pattern.hs:12:9
      Wildcard (String -> Int -> String) Int (String -> String),
        arising from a use of `??' at pattern.hs:19:5-10
    When generalising the type(s) for `a'


Ideas anyone? :)
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to