Si entiendo bien tu duda, algo que podés hacer es que tailsRepr se defina así:
tailsRepr :: Repr a -> Repr (Repr a)
tailsRepr (Repr sgte s) = Repr sgte' (s,False) where ...
Fijate que vos tomás un Repr, pero lo que retornás es otro Repr cuyo estado interno lo podés definir como quieras, en particular como un par.
Contesta esto tu duda? Cualquier cosa volvé a consultar.
saludos