[Haskell-beginners] 'Simple' function

Imants Cekusins imantc at gmail.com
Wed Jun 10 17:20:10 UTC 2015


Mike, if you are trying to run a "hello world" program in ghci, here
are 2 working functions.

-- #1 : all it does is prompts for input and sends the value back to IO

module Text where

ioStr :: IO()
ioStr = do
  putStrLn "enter anything"
  str <- getLine
  putStrLn str


-- #2 this program prepends the string you pass to it as an arg with "Hello"

str2str:: String -> String
str2str s = "Hello " ++ s


-- how to run:
-- #1 : ioStr
-- #2 : str2str "some text"

hope this helps


On 10 June 2015 at 19:08, aldiyen <aldiyen at aldiyen.com> wrote:
> And just as a note, you can't really ever get the value inside the IO monad out. IO is not pure / non-deterministic, since it depends on something outside the program, and there's no way to "make it pure", as it were. You have to do all your operations on that String within the context of an IO
>
> -aldiyen
>
>
>
>> On Jun 10, 2015, at 12:47, Steven Williams <theblessedadventhope at gmail.com> wrote:
>>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Here is return's type signature:
>>
>> return :: Monad m => a -> m a
>>
>> What you are doing with the do notation can also be expressed as ioStr
>>>> = (\str -> return str).
>>
>> do notation and bind both require you to have a value that has the
>> same monad as before.
>>
>> Steven Williams
>> My PGP Key: http://pgp.mit.edu/pks/lookup?op=get&search=0xCACA6C74669A54
>> FA
>>
>>> On 10/06/15 12:35, Mike Houghton wrote:
>>> Hi,
>>>
>>> I’ve been tryimg to write a function  with signature
>>>
>>> asString :: IO String -> String
>>>
>>>
>>> Does someone please have the patience to explain to me what the
>>> compiler error messages really mean for these two attempts and
>>> exactly what I’m doing (!!!) If I *do not* give this function any
>>> type signature then it works i.e..
>>>
>>> asString ioStr = do str <- ioStr return $ str
>>>
>>> and the compiler tells me its signature is
>>>
>>> asString :: forall (m :: * -> *) b. Monad m => m b -> m b
>>>
>>> which, at this stage of my Haskell progress, is just pure Voodoo.
>>> Why isn’t it’s signature  asString :: IO String -> String ?
>>>
>>>
>>> Another naive attempt is asString ioStr = str where str <- ioStr
>>>
>>> and then compiler says parse error on input ‘<-’
>>>
>>>
>>> Many Thanks
>>>
>>> Mike
>>>
>>> _______________________________________________ Beginners mailing
>>> list Beginners at haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v2
>>
>> iQIcBAEBAgAGBQJVeGo5AAoJEMrKbHRmmlT6N8UP/i/tAhDtyHiG3sgH3e5xAqyt
>> JAsyX2JaBQVjERRVaJQy1+Pg9hNdGBCrVljxY0BH5B8np956bnuIEyZKtSc2i2Jc
>> HM0lBesyzCYqw29QxAyFFno07iXQllocZaHUIgC4AoNYO5zNGSPYcNaB4O5SYoKl
>> 83Cjz97BHgAHkvHpsLDLOpizOkP+CsXwi8s/KRKoidLkbQpmv9SpqiFvmm9u+UK1
>> emZF/4veFE4Ay3AvIsxMpn7M5hVoKgat1xyGX02IrenvkOL69IIYc+4OvzK49Lxg
>> e8jrAehJDMh+U7zN+qVCY1ZyJbJF+uGawFC+XoswOdAra+Q23te77RKkligkmN7s
>> ACut72hwTejZN/sIaORqZXuy+HUY1LjlJnlz0RCdG1CLkr3EaKG5ZCX3E2N8RnxL
>> 1CKtEdtFJGDeBcIBh5my/7IC22loTpVhBhPU2DPo+iOP2sRsUs0nllbqbjGfGpuE
>> m37dR/tfq9FKwqYS5RUuAcZ8fWuPdojmO2WvI4thHBGJhsRK4gqhAI4MnKLHBEoL
>> xfyHSaoFif/jC7peF/+ZPjKSsIpCJU+R/tDUBM9u22o3IVeTs1sWGZXM7J32tlGc
>> K/MTF/F3phcxwSCqb99WBHhXOIkKSgp47gx1INgDZFug/CgjUI1Sl4jvZ5j/45D5
>> +RlHcYv+qp4J8nI59pFW
>> =Vunc
>> -----END PGP SIGNATURE-----
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


More information about the Beginners mailing list