It does not really make sense to make a type synonym an instance of some class, because a type synonym is just just what is says -- another name for some type. So making a type synonym for some type T an instance of a class would be the same as making T itself an instance of the class.

Typically you would make Adjustment its own type using newtype:

    newtype Adjustment a = Adjustment (SaleVariables -> a)

Ofcourse now it needs its own constructor (like you said you don't want it to).


/Johan



2013/4/14 Christopher Howard <christopher.howard@frigidcode.com>

I asked this question in Haskell-beginners, but I haven't heard anything
yet, so I'm forwarding to Cafe.

-------- Original Message --------
Subject: [Haskell-beginners] Monad instances and type synonyms
Date: Sat, 13 Apr 2013 17:03:57 -0800
From: Christopher Howard <christopher.howard@frigidcode.com>
Reply-To: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell <beginners@haskell.org>
To: Haskell Beginners <beginners@haskell.org>

I am playing around with some trivial code (for learning purposes) I
wanted to take

code:
--------
-- SaleVariables a concrete type defined early

-- `Adjustment' represents adjustment in a price calculation
-- Allows functions of type (a -> Adjustment a) to be composed
-- with an appropriate composition function
type Adjustment a = SaleVariables -> a
--------

And put it into

code:
--------
instance Monad Adjustment where

  (>>=) = ...
  return = ...
--------

If I try this, I get

code:
--------
Type synonym `Adjustment' should have 1 argument, but has been given none
In the instance declaration for `Monad Adjustment'
--------

But if I give an argument, then it doesn't compile either (it becomes a
"*" kind). And I didn't want to make the type with a regular "data"
declaration either, because then I have to give it a constructor, which
doesn't fit with what I want the type to do.

--
frigidcode.com





_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe