X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=Data%2FCollections%2FNewtype%2FTH.hs;fp=Data%2FCollections%2FNewtype%2FTH.hs;h=0301fd37562222cc896bc9246dc20c0c423d1bba;hp=c60ea2b9b823311c05a1b9fa6faf4e5b365055a5;hb=251831f3e465eb77666193efcb9b4c02531faa6c;hpb=b7d905bb9034a4f21fa3889e83abff918c43cb58 diff --git a/Data/Collections/Newtype/TH.hs b/Data/Collections/Newtype/TH.hs index c60ea2b..0301fd3 100644 --- a/Data/Collections/Newtype/TH.hs +++ b/Data/Collections/Newtype/TH.hs @@ -2,7 +2,9 @@ TemplateHaskell , UnicodeSyntax #-} --- |FIXME: doc +-- |Doesn't anyone know why these instances can't be derived using +-- GeneralizedNewtypeDeriving? I think its limitation isn't reasonable +-- at all... module Data.Collections.Newtype.TH ( derive ) @@ -27,7 +29,42 @@ import Prelude.Unicode type Deriver = Q Cxt → Q Type → Q Exp → Q Exp → Q Dec --- |FIXME: doc +-- |Automatic newtype instance deriver for type classes defined by the +-- collections-api package. +-- +-- @ +-- {-\# LANGUAGE TemplateHaskell \#-} +-- module Foo (T) where +-- import "Data.Collections" +-- import "Data.Collections.BaseInstances" () +-- import qualified Data.Collections.Newtype.TH as C +-- import qualified "Data.Map" as M +-- +-- newtype T = T (M.Map 'Int' 'Bool') +-- +-- C.derive [d| instance 'Unfoldable' T ('Int', 'Bool') +-- instance 'Foldable' T ('Int', 'Bool') +-- instance 'Indexed' T 'Int' 'Bool' +-- ... +-- |] +-- @ +-- +-- This function can derive the following instances: +-- +-- * 'Unfoldable' +-- +-- * 'Foldable' +-- +-- * 'Collection' +-- +-- * 'Indexed' +-- +-- * 'Map' +-- +-- * 'Set' +-- +-- * 'SortingCollection' +-- derive ∷ Q [Dec] → Q [Dec] derive = (concat <$>) ∘ (mapM go =≪) where