packages feed

alloy-proxy-fd (empty) → 1.0.0

raw patch · 5 files changed

+195/−0 lines, 5 filesdep +alloydep +basedep +mtlsetup-changed

Dependencies added: alloy, base, mtl

Files

+ Data/Generics/Alloy/EffectProxy.hs view
@@ -0,0 +1,74 @@+-- Alloy.+-- Copyright (c) 2008-2009, University of Kent.+-- All rights reserved.+-- +-- Redistribution and use in source and binary forms, with or without+-- modification, are permitted provided that the following conditions are+-- met:+--+--  * Redistributions of source code must retain the above copyright+--    notice, this list of conditions and the following disclaimer.+--  * Redistributions in binary form must reproduce the above copyright+--    notice, this list of conditions and the following disclaimer in the+--    documentation and/or other materials provided with the distribution.+--  * Neither the name of the University of Kent nor the names of its+--    contributors may be used to endorse or promote products derived from+--    this software without specific prior written permission.+--+-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS+-- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR+-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR+-- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,+-- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,+-- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR+-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF+-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING+-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++-- | A module providing an 'AlloyA' instance in terms of 'AlloyARoute'.+--+-- The contents of this module appear blank because it contains only class instances.+--  The 'AlloyA' and 'AlloyARoute' class instances have nearly identical definitions+-- for any given type, and running 'AlloyARoute' and ignoring the route has+-- the same behaviour as the 'AlloyA' class.  Therefore, it is possible to define+-- a single 'AlloyA' instance in terms of 'AlloyARoute'.  That is what this module does.+--+-- To use this module, you should generate only 'AlloyARoute' instances with the+-- "Data.Generics.Alloy.GenInstances" module, and import this module.  If you+-- import this alongside any other 'AlloyA' instances you'll have incoherent+-- instances.+module Data.Generics.Alloy.EffectProxy () where++import Data.Generics.Alloy++-- | A helper class to convert operations not expecting a route to those that ignore+-- the route (which will have the unit type as its outer type).+class ConvertOpsToIgnoreRoute (o :: (* -> *) -> *) o' | o -> o' where+  convertOpsToIgnoreRoute :: o m -> o' m ()++instance ConvertOpsToIgnoreRoute BaseOpA BaseOpARoute where+  convertOpsToIgnoreRoute = const baseOpARoute++instance ConvertOpsToIgnoreRoute r r' =>+  ConvertOpsToIgnoreRoute (t :-* r) (t :-@ r') where+  convertOpsToIgnoreRoute (f :-* r) = (f . fst) :-@ (convertOpsToIgnoreRoute r)+++instance (+    AlloyARoute t o o'+  , ConvertOpsToIgnoreRoute ro o+  , ConvertOpsToIgnoreRoute ro' o') => AlloyA t ro ro' where+  transformM o o' t = transformMRoute (convertOpsToIgnoreRoute o)+                                      (convertOpsToIgnoreRoute o')+                                      (t, fakeRoute t) +    where+      fakeRoute :: t -> Route t ()+      fakeRoute = const $ error "transformM"+  transformA o o' t = transformARoute (convertOpsToIgnoreRoute o)+                                      (convertOpsToIgnoreRoute o')+                                      (t, fakeRoute t) +    where+      fakeRoute :: t -> Route t ()+      fakeRoute = const $ error "transformA"
+ Data/Generics/Alloy/PureProxy.hs view
@@ -0,0 +1,66 @@+-- Alloy.+-- Copyright (c) 2008-2009, University of Kent.+-- All rights reserved.+-- +-- Redistribution and use in source and binary forms, with or without+-- modification, are permitted provided that the following conditions are+-- met:+--+--  * Redistributions of source code must retain the above copyright+--    notice, this list of conditions and the following disclaimer.+--  * Redistributions in binary form must reproduce the above copyright+--    notice, this list of conditions and the following disclaimer in the+--    documentation and/or other materials provided with the distribution.+--  * Neither the name of the University of Kent nor the names of its+--    contributors may be used to endorse or promote products derived from+--    this software without specific prior written permission.+--+-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS+-- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR+-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR+-- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,+-- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,+-- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR+-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF+-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING+-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++-- | A module providing an 'Alloy' instance in terms of 'AlloyA'.+--+-- The contents of this module appear blank because it contains only class instances.+--  The 'Alloy' and 'AlloyA' class instances have nearly identical definitions+-- for any given type, and running 'AlloyA' with an identity functor\/monad has+-- the same behaviour as the pure class.  Therefore, it is possible to define+-- a single 'Alloy' instance in terms of 'AlloyA'.  That is what this module does.+--+-- To use this module, you should generate only 'AlloyA' instances with the+-- "Data.Generics.Alloy.GenInstances" module, and import this module.  If you+-- import this alongside any other 'Alloy' instances you'll have incoherent+-- instances.  Alternatively, you can generate only 'AlloyARoute' instances and+-- use this module along with "Data.Generics.Alloy.EffectProxy".+module Data.Generics.Alloy.PureProxy () where++import Control.Monad.Identity++import Data.Generics.Alloy++instance (AlloyA t mo mo', ConvertOpsToIdentity o mo, ConvertOpsToIdentity o' mo') => Alloy t o o' where+  transform o o' t = runIdentity (transformM (convertOpsToIdentity o) (convertOpsToIdentity o') t)++-- {{{ Various type-level programming ops conversions:++-- | A helper class to convert non-monadic transformations into monadic ones in+-- the Identity monad.+class ConvertOpsToIdentity o o' | o -> o' where+  convertOpsToIdentity :: o -> o' Identity++instance ConvertOpsToIdentity BaseOp BaseOpA where+  convertOpsToIdentity = const baseOpA++instance ConvertOpsToIdentity r r' => ConvertOpsToIdentity (a :- r) (a :-* r') where+  convertOpsToIdentity (f :- r) = (return . f) :-* (convertOpsToIdentity r)+++-- }}}
+ LICENSE view
@@ -0,0 +1,27 @@+Copyright (c) 2008-2009, University of Kent.+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are+met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.+    * Redistributions in binary form must reproduce the above copyright+      notice, this list of conditions and the following disclaimer in the+      documentation and/or other materials provided with the distribution.+    * Neither the name of the University of Kent nor the names of its+      contributors may be used to endorse or promote products derived from+      this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.lhs view
@@ -0,0 +1,5 @@+#! /usr/bin/env runhaskell++> import Distribution.Simple+> main = defaultMain+
+ alloy-proxy-fd.cabal view
@@ -0,0 +1,23 @@+Name: alloy-proxy-fd+Version: 1.0.0+License: BSD3+License-File: LICENSE+Author: Neil Brown+Copyright: Copyright 2008-2009, University of Kent+Maintainer: neil@twistedsquare.com+Cabal-Version: >= 1.2.3+Build-type: Simple+Synopsis: Some add-on instances for the Alloy library+Description: Two modules supplying proxy instances that allow you to define pure and/or effectful+             instances in terms of their more general+	     effectful/route-including equivalents in Alloy.+Category: Generics+Tested-With: GHC==6.8.2, GHC == 6.10.3+Library+  Build-Depends: base >= 3 && < 5, alloy, mtl++  Exposed-modules: Data.Generics.Alloy.EffectProxy+                   Data.Generics.Alloy.PureProxy++  Extensions: TypeOperators MultiParamTypeClasses FunctionalDependencies FlexibleInstances UndecidableInstances KindSignatures+