ThunkBlock.java
/***************************************************************************
Copyright 2009 Emily Estes
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
***************************************************************************/
package net.metanotion.functor;
/** Convert a thunk into an instance of a "constant" block. Note, this block may not actually produce
a constant value, but rather, it is "invariant" to the parameter of the block and just evaluates the
underlying thunk for each call to eval.
@param <V> The output of this block.
@param <T> The input to this block, which, since it's ignored, really doesn't matter.
*/
public final class ThunkBlock<V,T> implements Block<T, V> {
private final Thunk<V> constant;
/** Produce a new block whose values are provided by the thunk.
@param constant The thunk underlying this block.
*/
public ThunkBlock(final Thunk<? super V> constant) {
this.constant = (Thunk<V>) constant;
}
@Override public V eval(final T o) throws Exception { return constant.eval(); }
}