[Haskell-cafe] Functor instance for FunPB

Joachim Breitner mail at joachim-breitner.de
Sat May 6 18:45:34 UTC 2017


Am Samstag, den 06.05.2017, 20:32 +0200 schrieb Alex Wede:
> The monoid instance is from my teacher. 

it is hard to tell with confidence, given that we do not know what
FunFB is supposed to “mean”, but 

data FunPB a b = FunPB { runFunPB :: a -> (a,[b]) }
instance Monoid (FunPB a b) where
   mempty  = FunPB $ \k -> (k,mempty)
   mappend pb1 pb2 = FunPB $ \n -> (,) n $ msum . (<$>) (uncurry (flip const).((flip runFunPB) n)) $ [pb1,pb2]

looks very fishy, as the return value of of type a from pb1 and pb2 are ignored in mappend

The latter means that this is not a lawful monoid, because for

  pb = (\n -> (n+1, []) 

we have

  mempty `mappend` pb == mempty /= pb

Did you maybe mean

   mappend pb1 pb2 = FunPB  $ \n0 ->
	let (n1,xs1) = runFunFB n1
	    (n2,xs2) = runFunFB n2
        in (n2, xs1 ++ xs2)


Joachim Breitner
  mail at joachim-breitner.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20170506/6869418c/attachment.sig>

More information about the Haskell-Cafe mailing list