package Ġfp . kotlin . example . chapter 1 0 Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġx Ġ= Ġ 1 0 ĊĠĠĠ Ġval Ġf Ġ= Ġ{ Ġa : ĠInt Ġ-> ĠJust ( a Ġ* Ġ 2 ) Ġ} ĊĠĠĠ Ġval Ġg Ġ= Ġ{ Ġa : ĠInt Ġ-> ĠJust ( a Ġ+ Ġ 1 ) Ġ} ĊĠĠĠ Ġval Ġh Ġ= Ġ{ Ġa : ĠInt Ġ-> ĠJust ( a Ġ* Ġ 1 0 ) Ġ} ĊĠĠĠ Ġval Ġpure Ġ= Ġ{ Ġa : ĠInt Ġ-> ĠJust ( a ) Ġ} ĊĠĠĠ Ġval Ġm Ġ= ĠJust ( 1 0 ) ĊĊĠĠĠ Ġ// ĠLeft ĠIdentity ĊĠĠĠ Ġ// Ġpure ( x ) Ġflat Map Ġf Ġ= Ġf ( x ) ĊĠĠĠ Ġprintln ( pure ( x ) Ġflat Map Ġf Ġ== Ġf ( x )) Ġ Ġ// Ġtrue ĊĊĠĠĠ Ġ// ĠRight ĠIdentity ĊĠĠĠ Ġ// Ġm Ġflat Map Ġpure Ġ= Ġm ĊĠĠĠ Ġprintln ( m Ġflat Map Ġpure Ġ== Ġm ) ĠĠĠ Ġ// Ġtrue ĊĊĠĠĠ Ġ// ĠAssoci ativity ĠLaw ĊĠĠĠ Ġ// Ġ( m Ġflat Map Ġf ) Ġflat Map Ġg Ġ= Ġm Ġflat Map Ġ{ Ġx Ġ-> Ġf ( x ) Ġflat Map Ġg Ġ} ĊĠĠĠ Ġprintln (( m Ġflat Map Ġf ) Ġflat Map Ġg Ġ== Ġm Ġflat Map Ġ{ Ġa Ġ-> Ġf ( a ) Ġflat Map Ġg Ġ} Ġ) Ġ Ġ// Ġtrue ĊĊĠĠĠ Ġ// Ġidentity Ġcompose Ġf Ġ= Ġf ĊĠĠĠ Ġ// Ġf Ġcompose Ġidentity Ġ= Ġf ĊĠĠĠ Ġ// Ġ( f Ġcompose Ġg ) Ġcompose Ġh Ġ= Ġf Ġcompose Ġ( g Ġcompose Ġh ) ĊĠĠĠ Ġprintln (( pure Ġcompose Ġf )( 1 0 ) Ġ== Ġf ( 1 0 )) Ġ Ġ// Ġtrue ĊĠĠĠ Ġprintln (( f Ġcompose Ġpure )( 1 0 ) Ġ== Ġf ( 1 0 )) Ġ Ġ// Ġtrue ĊĠĠĠ Ġprintln ((( f Ġcompose Ġg ) Ġcompose Ġh )( 1 0 ) Ġ== Ġ( f Ġcompose Ġ( g Ġcompose Ġh ))( 1 0 )) Ġ// Ġtrue Ċ } Ċ Ċ private Ġin fix Ġfun Ġ< F , ĠG , ĠR > Ġ(( F ) Ġ-> ĠMonad < R >). compose ( g : Ġ( G ) Ġ-> ĠMonad < F >): Ġ( G ) Ġ-> ĠMonad < R > Ġ{ ĊĠĠĠ Ġreturn Ġ{ Ġg Input : ĠG Ġ-> Ġg ( g Input ) Ġflat Map Ġthis Ġ} Ċ }