}
/**
+ * @var callable
+ */
+const constt = 'Widmogrod\Functional\constt';
+
+/**
* const :: a -> b -> a
*
* const x is a unary function which evaluates to x for all inputs.
*
* For instance,
- *
+ * ```haskell
* >>> map (const 42) [0..3]
* [42,42,42,42]
+ * ```
*
* @param $a
* @param $b
+ * @return callable
*/
-function constt($a, $b)
+function constt($a, $b = null)
{
- // TODO
+ return curryN(2, function ($a) {
+ return $a;
+ });
}
--- /dev/null
+<?php
+
+namespace test\Functional;
+
+use Eris\Generator;
+use Eris\TestTrait;
+use function Widmogrod\Functional\constt;
+
+class ConsttTest extends \PHPUnit_Framework_TestCase
+{
+ use TestTrait;
+
+ public function test_it_should_generate_infinite_list()
+ {
+ $this->forAll(
+ Generator\int(),
+ Generator\int()
+ )->then(function ($a, $b) {
+ return constt($a, $b) === $a
+ && constt($a)($b) === $a;
+ });
+ }
+}