Looking through the Haskell Prelude, I see a function const:
const x _ = x
I can\'t seem to find anything relevant regarding t
const may be just the implementation you are looking for in conjunction with other functions. Here is an example I discovered.
Say we want to rewrite a structure of 2-tuples to another structure of 2-tuples. I might express this as so:
((a,b),(c,d)) ⇒ (a,(c,(5,a)))
I can give a straight-forward definition with pattern matching:
f ((a,b),(c,d)) = (a,(c,(5,a)))
What if I want a pointless (tacit) solution for these kind of rewrites? Some thinking and fiddling later, the answer is that we can express any rewrites with (&&&), const, (.), fst, snd. Note that (&&&) is from Control.Arrow.
The solution of the example using these functions is:
(fst.fst &&& (fst.snd &&& (const 5 &&& fst.fst)))
Note the similarity with (a,(c,(5,a))). What if we replace &&& with ,? Then it reads:
(fst.fst, (fst.snd, (const 5, fst.fst)))
Notice how a is the first element of the first element, and that is what fst.fst projects. Notice how c is the first element of the second element, and that is what fst.snd projects. That is, variables become the path to their source.
const allows us to introduce constants. Interesting how the name lines up with the meaning!
I then generalised this idea with Applicative so that you can write any function in a pointless style (so long as you have case analysis available as functions, such as maybe, either, bool). Again, const plays the role of introducing constants. You can see this work in the Data.Function.Tacit package.
When you start abstractly, at the goal, and then work towards an implementation, you can be surprised by the answers. That is to say, any one function may be as mysterious as any one cog in a machine. If you pull back to bring the whole machine into view, however, you can understand the context in which that cog is necessary.