O quebra-cabeça das continuações yin yang faz sentido em um idioma digitado?

Esta questão está relacionada a "Como o quebra-cabeça yin-yang funciona?". O exemplo yin yang de continuações no esquema é assim, de acordo comrtigo @Wikipedia:

(let* ((yin
     ((lambda (cc) (display #\@) cc) (call-with-current-continuation (lambda (c) c))))
   (yang
     ((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))))
(yin yang))

Estou tentando escrever um trecho de código equivalente em um (edit:estatisticament) linguagem digitada, como SML / NJ, mas está me dando erros de digitação. Portanto, ou o quebra-cabeça não digita, ou estou entendendo mal a sintaxe do esquema. Como seria o trecho de código acima em SML ou Ocaml (comcallcc extensão)?

By the way, qual é a fonte do quebra-cabeça? De onde veio

Editar Acho que sei a resposta. Precisamos de um tipo recursivot satisfyingt = t -> s para algum tipos.

Editar edição: Não, não é, a resposta é do tipo recursivot satisfyingt = t -> t.

questionAnswers(6)

yourAnswerToTheQuestion