What are the defaulting rules for IsList?  It needs to be backwards compatible.

   -- Lennart (iPhone)

On Sep 30, 2011, at 19:28, George Giorgidze <giorgi...@gmail.com> wrote:

> GHC Users,
> 
> I would like to make to the following two proposals:
>  * Eliminate the default grouping close from SQL-like comprehensions
>  * Introduce a GHC extension for list literal overloading
> 
> OK, let me start with the first proposal.
> 
> Currently, the SQL-like comprehension notation (both in its list 
> comprehension and monad comprehension variants) features the following five 
> clauses:
> 
> then f
> then f by e
> then group by e
> then group using f
> then group by e using f
> 
> The first two clauses are used for specifying transformations of type [a] -> 
> [a] (or Monad m => m a-> m a for monad comprehensions). The following three 
> clauses are used for specifying transformations of type [a] -> [[a]] (or 
> Monad m, Functor f => m a -> m (f a) for monad comprehensions). See [1] for 
> further details.
> 
> Note that the third clause does not mention which function is used for 
> grouping. In this case GHC.Exts.groupWith function is used as a default for 
> list comprehensions and the mgroupWith function from the MonadGroup class is 
> used as a default for monad comprehensions.
> 
> I would like to suggest to remove the third clause for the following reasons:
> * Currently the syntax is asymmetrical. Note that there is the default case 
> for the 'then group' clause and not for the 'then' clause.
> * In the current notation it is not clear which grouping function is used in 
> the default case
> * For many monads including lists it is not clear which function should be 
> selected as a default (e.g., the groupWith function also does sorting and it 
> is not clear to me why this should be the default)
> * Gets rid of the MonadGroup class. Currently the sole purpose of this class 
> is to introduce a default grouping function for monad comprehensions.
> * Explicit mention of the grouping function would make  monad/list 
> comprehensions much easier to read by making it immediately apparent which 
> function is used for grouping.
> 
> My second proposal is to introduce the OverloadedLists extension that 
> overloads list literals. See Section 5.2 in [1] for details.
> 
> Basically the idea is to treat list literals like:
> 
> [1,2,3]
> 
> as
> 
> fromList [1,2,3]
> 
> where
> 
> class IsList l where
>  type Item l
>  fromList :: [Item l] -> l
> 
> In the following I give useful instances of the IsList class.
> 
> instance IsList [a] where
>  type Item [a] = a
>  fromList = id
> 
> instance (Ord a) => IsList (Set a) where
>  type Item (Set a) = a
>  fromList = Set.fromList
> 
> instance (Ord k) => IsList (Map k v) where
>  type Item (Map k v) = (k,v)
>  fromList = Map.fromList 
> 
> instance IsList (IntMap v) where
>  type Item (IntMap v) = (Int,v)
>  fromList = IntMap.fromList 
> 
> instance IsList Text where
>  type Item Text = Char
>  fromList = Text.pack
> 
> As you can see the extension would allow list literals to be used for sets, 
> maps and integer maps. In addition the suggested OverloadedLists extension 
> would subsume OverloadedStrings extension (see the instance for Text, for 
> example). Having said that, for now, I am not suggesting to remove the 
> OverloadedStrings extension as it appears to be widely used.
> 
> This extension could also be used for giving data-parallel array literals 
> instead of the special syntax used currently.
> 
> Unless there is a vocal opposition to the aforementioned two proposals, I 
> would like to implement them in GHC. Both changes appear to be 
> straightforward to implement.
> 
> Thanks in advance for your feedback.
> 
> Cheers, George
> 
> [1] http://www-db.informatik.uni-tuebingen.de/files/giorgidze/haskell2011.pdf
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users@haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to