
There is a concept here: create a container containing exactly one value. As Tikhon indicates, this is a different concept from pure.
Fwiw, if you actually want a possibly meaningful/lawful reification of the very specific "create any container containing exactly one item" concept then an obvious approach would be to base it on the existing (IMO under-appreciated) 'IsList' abstraction; in other words basically something like singleton :: IsList l => Item l -> l singleton = fromListN 1 . (:[]) which could either be a method of `IsList` (with the default impl above and an obvious lawful relationship to `fromList`/`toList`) or just be a top-level binding exported from "GHC.List" and/or "GHC.Exts" (which aren't governed by the Haskell Library Report and thus have a lower barrier to entry).