<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div name="messageBodySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;">Hi,
<div><br /></div>
<div>The function `join` flattens a double-layered monad into one layer and its type signature is </div>
<div><br /></div>
<div>  join :: (Monad m) => m (m a) -> m a</div>
<div><br /></div>
<div>But when the first argument supplied is `(,)`, the type signature becomes </div>
<div><br /></div>
<div>  join (,) :: b -> (b, b)</div>
<div><br /></div>
<div>in ghci. The monad constraint is lost when supplied the first argument. So my question is why the type constraint is lost and what monad is supplied here.</div>
</div>
<div name="messageSignatureSection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;"><br />
Regards,
<div>Qingbo Liu</div>
</div>
</body>
</html>