i'm confused, are these types ever human writeable? 

If not, are they meant to be an operational way of communicating how a pattern works? In which case, wouldn't having the pattern definition visible in the haddocks be a simpler way to communicate it?  There have been several projects in the past to have type system for describing lambda calculi with pretty right higher order pattern matching facilities, perhaps that vocabulary could be used here?

cheers (i hope my questions make sense, I could merely be confused)
-Carter


On Sun, Dec 22, 2013 at 10:56 PM, Dr. ERDI Gergo <gergo@erdi.hu> wrote:
On Sun, 22 Dec 2013, Dr. ERDI Gergo wrote:

If it's only A and B, perhaps abominations like these could be considered:

    -- implicit foralls
    pattern Show t => P t :: (Num t, Eq b) => b -> T t

    -- explicit foralls
    pattern forall t. Show t => P t :: forall b. (Num t, Eq b) => b -> T t

I'm not 100% sure what that 't' in 'P t' is supposed to be in your example. 'P' is not like a type constructor at all; it's a lot more like a data constructor.

Thinking further about it, I think this could work, using a syntax similar to data constructor definitions instead of sticking to the function type syntax:

pattern (Num a, Eq b) => P a b :: (Show a) => T a

or with explicit foralls (using the fact that we can deduce which tyvars are universial vs existential simply by seeing if they occur in 'T a'):

pattern forall a b. (Num a, Eq b) => P a b :: (Show a) => T a

my only concern with this one is that the direction of the first double arrow doesn't "feel right".

Other examples with this syntax:

-- Number literal patterns
pattern Z :: (Num a, Eq a) => a pattern Z = 0

-- Monomorphic patterns
pattern TrueAnd Bool :: [Bool]
pattern TrueAnd b = [True, b]

-- Infix notation
pattern a :< Seq a :: Seq a
pattern x :< xs <- (Seq.viewl -> x Seq.:< xs)

I'm liking this so far.

Bye,
        Gergo


--

  .--= ULLA! =-----------------.
   \     http://gergo.erdi.hu   \
    `---= gergo@erdi.hu =-------'
RICE: Race Inspired Cosmetic Enhancement
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users