Send Beginners mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
        [email protected]

You can reach the person managing the list at
        [email protected]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1. Re:  Applicative on Tree (mike h)


----------------------------------------------------------------------

Message: 1
Date: Tue, 8 Sep 2015 13:47:36 +0000 (UTC)
From: mike h <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Applicative on Tree
Message-ID:
        <[email protected]>
Content-Type: text/plain; charset="utf-8"

Thanks I'll work through it.
 


     On Tuesday, 8 September 2015, 0:39, Imants Cekusins <[email protected]> 
wrote:
   

 > data Tree a = Node a [Tree a]

well here is something that builds and runs. Not sure if the monad laws apply.
watch out for indents!


{-# LANGUAGE InstanceSigs #-}
module TreeApp where

import Debug.Trace
import Data.Char

data Tree a = Node a [Tree a]? deriving (Show)


instance Functor Tree where
? fmap::(a -> b) -> Tree a -> Tree b
? fmap f (Node x l0) = Node (f x) (fmap f <$> l0)


instance Applicative Tree where
? pure::a -> Tree a
? pure a =? Node a []

? (<*>)::Tree (a -> b) -> Tree a -> Tree b
? (<*>) (Node f _) tra = f <$> tra


instance Monad Tree where
? return::a -> Tree a
? return a = pure a

? (>>=)::Tree a -> (a -> Tree b) -> Tree b
? (>>=) (Node x []) amb = amb x
? (>>=) (Node x l0) amb = Node b (m1 <$> l0)
? ? ? ? where (Node b _) = amb x
? ? ? ? ? ? ? m1 ta = ta >>= amb


f::Char->Int
f = digitToInt

mb::Char->Tree Int
mb c = f <$> (pure c)

main::Char -> Char -> IO ()
main a b = print $ tc4 >>= mb
{-
? do
? ? ? print ti2
? ? ? print ta3
? ? ? tm4 <- tc4
-}
? where tc1 = pure a
? ? ? ? ti2 = f <$> tc1
? ? ? ? ta3 = (Node f []) <*> tc1
? ? ? ? tc4 = Node b [tc1]
_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://mail.haskell.org/pipermail/beginners/attachments/20150908/2643ae89/attachment-0001.html>

------------------------------

Subject: Digest Footer

_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


------------------------------

End of Beginners Digest, Vol 87, Issue 2
****************************************

Reply via email to