Send Beginners mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://www.haskell.org/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:  Create new value for given type (Kim-Ee Yeoh)
   2. Re:  Performance problem with Haskell/OpenGL/GLFW
      (Jesper S?rnesj?)
   3. Re:  Performance problem with Haskell/OpenGL/GLFW
      (Jesper S?rnesj?)
   4. Re:  Performance problem with Haskell/OpenGL/GLFW
      (Hollister Herhold)
   5.  Trouble in (Fast)CGI land: matching `CGIT IO     a0' with actual
      type `IO ()' (emacstheviking)
   6. Re:  Trouble in (Fast)CGI land: matching `CGIT IO a0' with
      actual type `IO ()' (David McBride)


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

Message: 1
Date: Mon, 11 Mar 2013 03:48:33 +0700
From: Kim-Ee Yeoh <[email protected]>
Subject: Re: [Haskell-beginners] Create new value for given type
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Message-ID:
        <CAPY+ZdRYVFG=z=aACXJQ7p4t39Cc_dx6c4M_zKq8uiBSxF1=7...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

On Mon, Mar 11, 2013 at 1:33 AM, Kim-Ee Yeoh <[email protected]> wrote:
> class MyTheory a  where
>   someKindOfChoice :: a -> [a] -> [a]

Whoops, that should be [a] -> [a], or perhaps more usefully [a] -> a.

In a way, such a function constructively /proves/ that the type is
infinite. Of course, it has to satisfy a bunch of conditions. You can
sort of see how going down this path leads naturally to Coq and Agda.

-- Kim-Ee



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

Message: 2
Date: Mon, 11 Mar 2013 08:11:36 +1100
From: Jesper S?rnesj? <[email protected]>
Subject: Re: [Haskell-beginners] Performance problem with
        Haskell/OpenGL/GLFW
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Message-ID:
        <calex+wiznqhryvatoaeencmoecnfmyg56+h2ak0uvdkd+l-...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

On Mon, Mar 11, 2013 at 1:31 AM, Andrey Yankin <[email protected]> wrote:
> AFAIK glfw-b uses its own version of glfw which is built during setup.
> There is a makefile inside the package.

GLFW-b does indeed bundle its own version of the GLFW C library [1],
version 2.7.3 as of right now. This is why it can be installed without
first installing the C library on your system.

However, this is not the library that Test2.hs (nor test2.c) links
against. In fact, that program does not use GLFW-b at all, but rather
simply declares a few entry points with C calling convention that
should be there at linking time. I did this only to be able to rule
out any problem with GLFW-b.

> Can't reproduce this error on Arch.

I got the change to run my code on a Windows 7 machine, and didn't see
the problem there either. This seems to be specific to Haskell on Mac
OS X.

-- 
Jesper S?rnesj?
http://jesper.sarnesjo.org/

[1] https://github.com/bsl/GLFW-b/tree/master/glfw



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

Message: 3
Date: Mon, 11 Mar 2013 08:23:01 +1100
From: Jesper S?rnesj? <[email protected]>
Subject: Re: [Haskell-beginners] Performance problem with
        Haskell/OpenGL/GLFW
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Message-ID:
        <CALex+Wh2n6=92v1wngpuxzxju855pglwaw3rrxau+nlrcrq...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

On Mon, Mar 11, 2013 at 7:17 AM, Hollister Herhold <[email protected]> wrote:
> Okay, I think I just figured this out. Well, HOW to get it working with the
> accelerated renderer.
>
> I was wondering a simple way to check renderer info so I ran glxinfo. This
> (automatically) fired up X11, and then on a hunch I re-ran Test2 with X11
> running and got this:
>
> hhmacbook:~/Development/haskell/OpenGL:57> ./Test2
> hardware
> (2,7,7)
> (3,2,0)
> hhmacbook:~/Development/haskell/OpenGL:58>
>
> AH HA! I then quit X11 and re-ran Test2, and got this:
>
> hhmacbook:~/Development/haskell/OpenGL:58> ./Test2
> software
> (2,7,7)
> (3,2,0)
> hhmacbook:~/Development/haskell/OpenGL:59>
>
> SO- If you want the accelerated renderer, you need to have X11 running.
>
> Now, I have no idea WHY this is the case, but there you go.
>
> Hope this helps.

This lead me down an interesting path.

First, I should explain that my machine, like most newish Macs, has
two graphics cards. In my case, a discrete Nvidia GeForce GT 330M, and
an integrated Intel chip. The former is better, but the latter uses
less power, and the system is supposed to switch between them
automatically.

I used gfxCardStatus [1] to show which card was in use. When I ran
test2.c, the system briefly switched to the discrete card. However,
when I ran Test2.hs, the system kept using the integrated chip the
whole time. Presumably, the Intel chip lacks a hardware implementation
of OpenGL 3.2, which causes the system to fall back to a software
renderer. I then used gfxCardStatus to force the system to *always*
use the discrete card and - boom! - this time Test2.hs received a
hardware renderer!

So it seems that the problem is a) Mac OS X-specific, or possibly
specific to systems with multiple graphics cards, b) related to
triggering the *switch* to the better graphics card. I don't yet
understand why the C program triggers a switch, while the Haskell
program does not, but I'll keep investigating.

Thank you all very much for your help!

-- 
Jesper S?rnesj?
http://jesper.sarnesjo.org/

[1] http://gfx.io



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

Message: 4
Date: Sun, 10 Mar 2013 18:27:56 -0400
From: Hollister Herhold <[email protected]>
Subject: Re: [Haskell-beginners] Performance problem with
        Haskell/OpenGL/GLFW
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain;       charset=utf-8

I guess running X11 forces use of the NVidia chip. Interesting. 

-Hollister

On Mar 10, 2013, at 5:23 PM, Jesper S?rnesj? <[email protected]> wrote:

> On Mon, Mar 11, 2013 at 7:17 AM, Hollister Herhold <[email protected]> 
> wrote:
>> Okay, I think I just figured this out. Well, HOW to get it working with the
>> accelerated renderer.
>> 
>> I was wondering a simple way to check renderer info so I ran glxinfo. This
>> (automatically) fired up X11, and then on a hunch I re-ran Test2 with X11
>> running and got this:
>> 
>> hhmacbook:~/Development/haskell/OpenGL:57> ./Test2
>> hardware
>> (2,7,7)
>> (3,2,0)
>> hhmacbook:~/Development/haskell/OpenGL:58>
>> 
>> AH HA! I then quit X11 and re-ran Test2, and got this:
>> 
>> hhmacbook:~/Development/haskell/OpenGL:58> ./Test2
>> software
>> (2,7,7)
>> (3,2,0)
>> hhmacbook:~/Development/haskell/OpenGL:59>
>> 
>> SO- If you want the accelerated renderer, you need to have X11 running.
>> 
>> Now, I have no idea WHY this is the case, but there you go.
>> 
>> Hope this helps.
> 
> This lead me down an interesting path.
> 
> First, I should explain that my machine, like most newish Macs, has
> two graphics cards. In my case, a discrete Nvidia GeForce GT 330M, and
> an integrated Intel chip. The former is better, but the latter uses
> less power, and the system is supposed to switch between them
> automatically.
> 
> I used gfxCardStatus [1] to show which card was in use. When I ran
> test2.c, the system briefly switched to the discrete card. However,
> when I ran Test2.hs, the system kept using the integrated chip the
> whole time. Presumably, the Intel chip lacks a hardware implementation
> of OpenGL 3.2, which causes the system to fall back to a software
> renderer. I then used gfxCardStatus to force the system to *always*
> use the discrete card and - boom! - this time Test2.hs received a
> hardware renderer!
> 
> So it seems that the problem is a) Mac OS X-specific, or possibly
> specific to systems with multiple graphics cards, b) related to
> triggering the *switch* to the better graphics card. I don't yet
> understand why the C program triggers a switch, while the Haskell
> program does not, but I'll keep investigating.
> 
> Thank you all very much for your help!
> 
> -- 
> Jesper S?rnesj?
> http://jesper.sarnesjo.org/
> 
> [1] http://gfx.io
> 
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners



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

Message: 5
Date: Sun, 10 Mar 2013 22:40:04 +0000
From: emacstheviking <[email protected]>
Subject: [Haskell-beginners] Trouble in (Fast)CGI land: matching `CGIT
        IO      a0' with actual type `IO ()'
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Message-ID:
        <caeieuukezkevyzsdwpcet-fn94-n8optodouknhgkwkihfz...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

I am writing a stop-motion capture application using AngularJS and it's
going OK. I was inspired to do so after installing "IPCamera" on my phone
and Sony tablet. A typical IPCamera session lives on an internal address
like this, this example will turn on the LED on the camera:

   http://192.168.0.5:8080/enabletorch

Just because I can (or so I thought), I decided to write a tiny little
FastCGI application in Haskell to act as a proxy using the PATH_INFO
variable. This means that in to my Javascript code I have this code in a
service file:

angular.module('stomoServices', ['ngResource']).
    factory(
 'IPCamera',
function($resource, urlIPCameraAPI) {
    return $resource(
urlIPCameraAPI,
 {}, {
    ledOn:    { method: 'GET', params: {featureReq: 'enabletorch' }},
    ledOff:   { method: 'GET', params: {featureReq: 'disabletorch' }},
    focusOn:  { method: 'GET', params: {featureReq: 'focus' }},
    focusOff: { method: 'GET', params: {featureReq: 'nofocus'}}
});
 });

and I then issue commands like "IPCamera.ledOn()" etc. All very nice except
that it doesn't work yet because I can't get the worlds seemingly simplest
CGI application to compile yet! Here is the code that I have, it could be
"cleared up" but this is what I have so far:

main :: IO ()
main = runFastCGI . handleErrors $ do
  command <- getVar "PATH_INFO"
  case command of
    Nothing  ->
      outputError 400 "Missing IPCamera instruction (PATH_INFO)" []
    Just cmd ->
      ipCamExec (tail cmd) >> output "OK" -- tail drops the "/"
      where
        ipCamExec :: String -> IO ()
        ipCamExec url = do
          simpleHTTP (getRequest url) -- don't want or need response.
          return () -- to match the return type or so I thought.

and the error message I cannot seem to understand as it fills me with
monadic fear which I can't get out of:

ipcamera.hs:16:7:
    Couldn't match expected type `CGIT IO a0' with actual type `IO ()'
    In the return type of a call of `ipCamExec'
    In the first argument of `(>>)', namely `ipCamExec (tail cmd)'
    In the expression: ipCamExec (tail cmd) >> output "OK"

Please could some kind souls explain to me in simple terms just what is
going on and why I am close to tears right now? I have read the definitions
of CGIResult and CGI and they leave me cold. I am trying to understand
monads more but at times like this I once again realise what a complete
rank beginner I am!

Thanks.
Sean.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20130310/8e43f9c0/attachment-0001.htm>

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

Message: 6
Date: Sun, 10 Mar 2013 18:59:56 -0400
From: David McBride <[email protected]>
Subject: Re: [Haskell-beginners] Trouble in (Fast)CGI land: matching
        `CGIT IO a0' with actual type `IO ()'
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Message-ID:
        <can+tr406r9tdavjxhdcrujzm-mmuucdjufwwy9rcqd1gzmd...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"

Your ipCamExec is IO (), but you are running it in the CGI a monad which is
a type alias for CGIT IO a.  CGIT is an instance of MonadIO, so try liftIO
ipCamExec.  liftIO has a type MonadIO m => IO a -> m a, which means that if
you replace m with CGIT IO, you would get IO a -> CGIT IO a, which is
exactly what you need.

On Sun, Mar 10, 2013 at 6:40 PM, emacstheviking <[email protected]> wrote:

> I am writing a stop-motion capture application using AngularJS and it's
> going OK. I was inspired to do so after installing "IPCamera" on my phone
> and Sony tablet. A typical IPCamera session lives on an internal address
> like this, this example will turn on the LED on the camera:
>
>    http://192.168.0.5:8080/enabletorch
>
> Just because I can (or so I thought), I decided to write a tiny little
> FastCGI application in Haskell to act as a proxy using the PATH_INFO
> variable. This means that in to my Javascript code I have this code in a
> service file:
>
> angular.module('stomoServices', ['ngResource']).
>     factory(
>  'IPCamera',
> function($resource, urlIPCameraAPI) {
>     return $resource(
> urlIPCameraAPI,
>  {}, {
>     ledOn:    { method: 'GET', params: {featureReq: 'enabletorch' }},
>     ledOff:   { method: 'GET', params: {featureReq: 'disabletorch' }},
>     focusOn:  { method: 'GET', params: {featureReq: 'focus' }},
>     focusOff: { method: 'GET', params: {featureReq: 'nofocus'}}
> });
>  });
>
> and I then issue commands like "IPCamera.ledOn()" etc. All very nice
> except that it doesn't work yet because I can't get the worlds seemingly
> simplest CGI application to compile yet! Here is the code that I have, it
> could be "cleared up" but this is what I have so far:
>
> main :: IO ()
> main = runFastCGI . handleErrors $ do
>   command <- getVar "PATH_INFO"
>   case command of
>     Nothing  ->
>       outputError 400 "Missing IPCamera instruction (PATH_INFO)" []
>     Just cmd ->
>       ipCamExec (tail cmd) >> output "OK" -- tail drops the "/"
>       where
>         ipCamExec :: String -> IO ()
>         ipCamExec url = do
>           simpleHTTP (getRequest url) -- don't want or need response.
>           return () -- to match the return type or so I thought.
>
> and the error message I cannot seem to understand as it fills me with
> monadic fear which I can't get out of:
>
> ipcamera.hs:16:7:
>     Couldn't match expected type `CGIT IO a0' with actual type `IO ()'
>     In the return type of a call of `ipCamExec'
>     In the first argument of `(>>)', namely `ipCamExec (tail cmd)'
>     In the expression: ipCamExec (tail cmd) >> output "OK"
>
> Please could some kind souls explain to me in simple terms just what is
> going on and why I am close to tears right now? I have read the definitions
> of CGIResult and CGI and they leave me cold. I am trying to understand
> monads more but at times like this I once again realise what a complete
> rank beginner I am!
>
> Thanks.
> Sean.
>
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20130310/a193df67/attachment.htm>

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

_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners


End of Beginners Digest, Vol 57, Issue 12
*****************************************

Reply via email to