[Haskell-cafe] CCC MyType
Lafras Uys
lafras at aims.ac.za
Fri Oct 1 07:18:29 EDT 2010
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 01/10/2010 04:54, Brent Yorgey wrote:
> On Wed, Sep 22, 2010 at 04:57:42PM +0200, Lafras Uys wrote:
>>
>>> data MyType a b = MyType {f::(a -> b)}
>>> data SomeType a b = SomeType {g::(a,b)}
>>
>>> instance (Symmetric MyType (Product MyType),
>>> Monoidal MyType (Product MyType),
>>> PreCartesian MyType) => CCC MyType where
>>
>>> type Exp MyType = SomeType
>
> This doesn't seem right to me. I would expect
>
> type Exp MyType = MyType
>
> and
>
> type Product MyType = SomeType
>
> since the exponential objects corresponding to functions are
> precisely function types.
Thanks to everyone who have responded so far, on and off the list.
As one person noted, I had to dispense with the class assumptions first.
This I've done and everything type checks. It was also suggested that I
choose more suggestive names for my data types.
Brent, you're right it is not correct. The following seems to work---at
least it type checks.
> newtype Fun a b = Fun {unFun :: a -> b }
> newtype Prod a b = Prod {unProd :: (a,b) } deriving (Show)
... class assumptions handled here.
> instance (Associative Fun Prod,
> Disassociative Fun Prod,
> Symmetric Fun Prod) => PreCartesian Fun where
> type Product Fun = Prod
> fst = Fun pFst
> snd = Fun pSnd
> diag = Fun pDiag
> pApply :: Prod (Fun a b) a -> b
> pApply (Prod (Fun f, x)) = f x
> pCurry :: ((Prod a b) -> c) -> a -> Fun b c
> pCurry p x = Fun (p . Prod . (,) x)
> instance (Symmetric Fun Prod,
> Monoidal Fun Prod,
> PreCartesian Fun) => CCC Fun where
> type Exp Fun = Fun
> apply = Fun pApply
> curry (Fun f) = Fun (pCurry f)
I can now find explicit bindings for apply and curry, however not for
uncurry. The type signature for uncurry introduces a new type
constructor (<=>),
> uncurry :: <= a (Exp <= b c) -> <= (Product <=> a b) c
I'm not sure what the meaning of (<=>) is? If someone could provide some
pointers, I would be much obliged.
Thanks again for all the responses,
Lafras
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAkylw4UACgkQKUpCd+bV+kr/fACdHnV56mpe3eVoSu91xKdDCaaP
+6IAoJVk0Oj+ynJKe7N7io0Y0YA7RBnF
=VFkJ
-----END PGP SIGNATURE-----
More information about the Haskell-Cafe
mailing list