using SCG = System.Collections.Generic; using SRCS = System.Runtime.CompilerServices; using SAT = System.AttributeTargets; namespace System { namespace Runtime.CompilerServices { [System.AttributeUsage (SAT.Class | SAT.Method)] public class ExtensionAttribute : Attribute {} } public delegate Func[T, TResult] (arg : T) : TResult; namespace Linq { [SRCS.ExtensionAttribute] public module Enumerable { [SRCS.ExtensionAttribute] public Where[TSource] ( source : SCG.IEnumerable[TSource], predicate : Func[TSource, bool] ) : SCG.IEnumerable[TSource] { foreach (x in source) when (predicate(x)) yield x; } } } } [Nemerle.Internal.ExtensionAttribute] public module Test2 { [Nemerle.Internal.ExtensionAttribute] public Where2[T] ( source : SCG.IEnumerable[T], pred : T->bool ) : SCG.IEnumerable[T] { foreach (x in source) when (pred(x)) yield x; } } public module Test3 { public Where3[T] ( this source : SCG.IEnumerable[T], pred : T->bool ) : SCG.IEnumerable[T] { foreach (x in source) when (pred(x)) yield x; } }