Tutorial completo em Tutorial Marlowe 3.0 (Parte 8) – Educação Cardano
8. Marlowe Embarcado
Neste tutorial, voltamos ao exemplo do compromisso e mostramos como podemos usar a Marlowe embarcado em Haskell para criar descrições mais legíveis, modulares e reutilizáveis dos contratos da Marlowe.
8.1 Um simples contrato de compromisso, revisitado

Lembre-se de que desenvolvemos este contrato da Marlowe em nosso tutorial anterior.
Enquanto o apresentamos como um contrato “monolótico”, podemos usar as definições de Haskell para torná-lo mais legível. Para começar, podemos separar o compromisso inicial da parte interna do contrato:

Muitos dos termos aqui são definidos em Haskell. Principalmente, temos os dois contratos que lidam com o que acontece quando há acordo entre Alice e Bob e, se não, como Carol deve arbitrar entre eles:

Dentro desses contratos, também usamos abreviações simples, como

que indica o preço do gato e, portanto, o valor do dinheiro sob custódia.
Também podemos descrever as escolhas feitas por Alice e Bob, observando que também é solicitado um valor padrão defValue, caso as escolhas não tenham sido feitas.

Ao descrever as opções, podemos atribuir nomes sensíveis aos valores numéricos:

e definir novas funções (ou “modelos”) para nós mesmos. Neste caso, definimos

como uma maneira de tornar a expressão das escolhas um pouco mais simples e mais legível:

Dadas todas essas definições, somos capazes de escrever o contrato no início desta seção, de maneira a tornar clara sua intenção. Escrevendo em Marlowe ‘puro’ ou expandindo essas definições, teríamos esse contrato:



“Exercícios: Que outras abreviações você poderia adicionar ao contrato na parte superior da página?
Você consegue identificar alguma função que possa definir para tornar o contrato mais curto ou mais modular?”
Este exemplo mostrou como a utilizar o Haskell de forma embarcada nos fornece uma linguagem mais expressiva, simplesmente reutilizando alguns dos recursos básicos do Haskell, a saber, definições de constantes e funções. No próximo tutorial, você aprenderá sobre como exercitar contratos Marlowe em ghci.
Nota
Este contrato está contido nos módulos EscrowSimpleV2.hs
A versão expandida vem do Marlowe Playground, que suporta a expansão de definições embarcadas no Marlowe puro.