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 +74/−0
- Data/Generics/Alloy/PureProxy.hs +66/−0
- LICENSE +27/−0
- Setup.lhs +5/−0
- alloy-proxy-fd.cabal +23/−0
+ 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+