rafael díaz rojas amin harou daniel lópez sánchez
DESCRIPTION
Rafael Díaz Rojas Amin Harou Daniel López Sánchez. Índice. Introducción Reseña técnica Ejemplo de aplicación. Introducción a. Es una librería para crear interfaz gráfica de usuario en Haskell Orientada a la industria Está construida sobre wxWidgets que es una librería de C++ - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/1.jpg)
1
Rafael Díaz RojasAmin Harou
Daniel López Sánchez
![Page 2: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/2.jpg)
2
ÍndiceÍndiceIntroducciónReseña técnicaEjemplo de aplicación
![Page 3: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/3.jpg)
3
Introducción aIntroducción a
![Page 4: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/4.jpg)
4
IntroducciónIntroducciónEs una librería para crear interfaz gráfica de
usuario en HaskellOrientada a la industriaEstá construida sobre wxWidgets que es una
librería de C++ Permite crear aplicaciones para Win32, Mac
OS X, GTK+, X11, Motif, WinCE…
![Page 5: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/5.jpg)
5
IntroducciónIntroducción
Soporta Windows, GTK (Linux) y MacOSEl núcleo de su interfaz se desarrolló a partir
de WxEiffel, luego la mayoría de sus Widgets están soportados
En Enero del 2009 apareció la versión 11.0WxHaskell no soporta la programación
multihebraWxHaskell consta de una página oficial llena
de documentación que fue creada en agosto del 2008
![Page 6: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/6.jpg)
6
Permite crear botones, cajas de texto, menús, etc
Permite especificar la disposición física de los componentes utilizando espacios de trabajo al estilo del lenguaje Java (Los espacios de trabajo sirven para organizar los Widgets)
También se usan eventos como el caso de Java (Por ejemplo se lanza un evento cuando presionamos un botón)
IntroducciónIntroducción
![Page 7: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/7.jpg)
7
WidgetsWidgetsLos Widgets son los componentes básicos de
la interfaz gráfica de usuarioUn Widget es un componente gráfico, o
control, con el cual el usuario interactúa.Existen dos tipos de Widgets:
◦Ventanas : Son los Widgets que contienen otros Widgets
◦Controles: Widgets normales (como una ventana normal con los botones cerrar, minimizar y maximizar)
![Page 8: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/8.jpg)
8
wxWidgetswxWidgetsFue diseñado por Thellinni en Italia 2008 en el
instituto de Aplicaciones de la Inteligencia Artificial de la universidad St. Andrews (Escocia)
Es un software libre (última versión 2.8.9 salió el 22 de septiembre de 2008)
Soporta varias plataformasTambién tiene una ligadura para lenguajes como
Python o PerlCuenta con soporte, documentación, ayuda en
línea, foros …
![Page 9: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/9.jpg)
9
wxWidgetswxWidgetsSe encuentra entre los 25 proyectos más activos de
código abiertoLa biblioteca es madura, lleva en desarrollo
desde 1992Permite gráficos 2D, 3D con openGL, Bases de
datos, Redes, Impresión, Hebras …Cuenta con una versión extendida para
dispositivos como PDAs y teléfonos celularesTiene un API orientada a objetos que es fácil de
aprender y de utilizar
![Page 10: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/10.jpg)
10
Desventajas WxWidgetsDesventajas WxWidgetsWxWidgets es software libre, por lo tanto
depende del tiempo y el esfuerzo de los que lo han creado.
Es una biblioteca muy grande.Consta solo de una capa para el API nativa de
cada SO (Es decir: la apariencia dependerá de en que SO se esta ejecutando)
Abusa de la utilización de macros para realizar ciertas operaciones
No cuenta con soporte para características modernas de C++ como manejo de excepciones
![Page 11: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/11.jpg)
11
Ventajas WxHaskellVentajas WxHaskell
Poder utilizar características importantes de Haskell, como el polimorfismo paramétrico, funciones de orden superior, evaluación perezosa
Los programas resultantes tienden a ser más cortos y más elegantes que sus homólogos en C++ por ejemplo
Posibilidad de interactuar con código Haskell
![Page 12: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/12.jpg)
12
Ejemplo de aplicación: DazzleEjemplo de aplicación: Dazzle
Es un programa que simula las creencias de las redes bayesianas
Fue desarrollado por el grupo Decision Support Systems de la universidad de Utrecht (Holanda)
Herramienta para la construcción, edición y análisis de redes bayesianas
Consta de más de 4000 líneas de código específico WxHaskell
![Page 13: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/13.jpg)
13
Ejemplo gráficoEjemplo gráfico
![Page 14: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/14.jpg)
14
Ejemplo de aplicación: DazzleEjemplo de aplicación: Dazzle
Es una aplicación para múltiples plataformas (Se usa tanto para Windows como para Linux)
Se desarrolló mucho antes del plazo previsto que ocurre rara vez en proyectos software.
En Windows XP, utiliza 12M de memoria para las grandes redes bayesianas de más de 50 nodos
![Page 15: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/15.jpg)
15
Más sobre WxHaskellMás sobre WxHaskellSe publicó un artículo en una revista muy popular
en Francia llamada L’informaticien sobre WxHaskell en Octubre del 2003 escrito por Frédéric Mazué
WxHaskell se imparte en la Universidad Politécnica De Valencia en la asignatura Programación Declarativa
También se imparte en la Universidad de Girona en la asignatura Paradigmas de programación
![Page 16: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/16.jpg)
16
En la Universidad Mayor de San Simón, Cochabamba, Bolivia se dio una conferencia sobre las interfaces gráficas de usuario en Haskell con especial atención a WxHaskell el 1 de Noviembre de 2007
El departamento de ciencias de la computación de la universidad de Utrecht, Holanda tiene varias aplicaciones de investigación que usan WxHaskell (El Dazzle es uno de ellos)
Más sobre WxHaskellMás sobre WxHaskell
![Page 17: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/17.jpg)
17
El departamento de Sistemas Informáticos y computación de la universidad politécnica de Valencia desarrolló una aplicación para la verificación de sitios Web utilizando lenguajes funcionales el 19 de Julio de 2005, y la interfaz gráfica de esa aplicación fue implementada en WxHaskell
Más sobre WxHaskellMás sobre WxHaskell
![Page 18: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/18.jpg)
18
Reseña técnica aReseña técnica a
![Page 19: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/19.jpg)
19
Atributos y PropiedadesAtributos y Propiedades
El tipo de un atributo representa su contenedor y su valor
text :: Attr (Button a) Stringget ::w->Attr w a->IO aA la combinación de atributo y valor se le llama
propiedad( :=) :: Attr w a->a->Prop wset ::w->[Prop w]->IO ()
![Page 20: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/20.jpg)
20
Atributos y PropiedadesAtributos y Propiedades
exclamation :: Button a->IO () exclamation b = do s <- get b text set b [text := s++"!"]
( :~) :: Attr w a->(a->a)->Prop w
exclamation b = set b [text :~ (++"!")]
![Page 21: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/21.jpg)
21
Atributos y PropiedadesAtributos y Propiedades
Como la clase Window de wxWidgets posee un atributo de texto, todo tipo de ventanas pueden tenerlo
text :: Attr (Window a) StringDe esta manera no hay que definir atributos de
forma separadaget ::w->Attr w a->IO aget w (Attr getter setter) = getter wdata Prop w = a: (Attr w a) := a| a: (Attr w a) :» (a->a)
![Page 22: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/22.jpg)
22
SeguridadSeguridad
wxHaskell impone una fuerte disciplina de tipos en wxWidgets
El tratamiento de memoria se realiza de forma automática
Comprueba punteros no inicializados, lanzando una excepción en Haskell
Existe una estructura jerárquica entre los Widgets creados
![Page 23: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/23.jpg)
23
LayoutLayout
Se aloja en el frame
caption :: String->Layoutspace :: Int->Int->Layoutrule :: Int->Int->Layoutboxed :: String->Layout->Layoutgrid :: Int->Int->[[Layout]]->Layout
![Page 24: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/24.jpg)
24
Primer ProgramaPrimer Programa
main :: IO () main = start hello
hello :: IO () hello = do f <- frame [text := "Hello!"] quit <- button f [text := "Quit", on command := close f] set f [layout := widget quit]
![Page 25: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/25.jpg)
25
LibreríasLibrerías
Graphics.UI.WX y Graphics.UI.WXCore
WXCore está a bajo nivelEs el núcleo de la interfaz de los wxWidgetsSolamente usa abstracción funcional
Sin embargo WX introduce nuevas funcionalidadesEstá implementada encima de WXCoreMecanismos de abstracción como la sobrecarga
![Page 26: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/26.jpg)
26
ConceptosConceptosEl frame es la ventana de nivel superiorTodas las demás poseen siempre un padreLos panels se incluyen en el frameLos elementos tienen atributosLos nombres de los atributos están sobrecargadosLa apariencia en la pantalla la establece layoutLos controles también tienen atributos
![Page 27: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/27.jpg)
27
ConceptosConceptos
Son instrucciones a seguir cuando se activan (on)Hay Widgets invisibles (timer, value …)Se basa en un entorno de desarrollo orientado a
objetosLos Widgets son punteros a objetos en C++Atributo + Valor = PropiedadGracias a la herencia hay atributos compartidosColisión con el sistema de tipos de HaskellEl contenedor sirve para Widgets anidados
![Page 28: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/28.jpg)
28
ConceptosConceptos
Alinear, Expandir y EstirarhalignLeft :: Layout->Layout -- defaulthalignRight :: Layout->LayouthalignCenter :: Layout->LayoutvalignTop :: Layout->Layout -- defaultvalignBottom :: Layout->LayoutvalignCenter :: Layout->Layout
![Page 29: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/29.jpg)
29
ConceptosConceptos
rigid :: Layout->Layout -- defaultshaped :: Layout->Layoutexpand :: Layout->Layout
static :: Layout->Layout -- defaulthstretch :: Layout->Layoutvstretch :: Layout->Layout
![Page 30: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/30.jpg)
30
ConceptosConceptos
Para dividir el espacio entre filas y columnas
hweight :: Int->Layout->Layoutvweight :: Int->Layout->LayoutDepende del peso de cada elemento
![Page 31: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/31.jpg)
31
Una primera aplicación en
ASTEROIDS(en 54 líneas de código)
![Page 32: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/32.jpg)
32
IntroducciónIntroducción
wxHaskell no es una interfaz diseñada para crear juegos, aún así, hemos elegido poner como ejemplo el conocido juego ASTEROIDS en una versión bastante minimal.
La intención de programar este juego es la de mostrar aspectos interesantes de wxHaskell, que con otras aplicaciones hubiera sido más "costoso" de ver.
Para quien no conozca el juego Asteroids, éste trata de una nave que debe de esquivar infinitas cantidades de asteroides, y en cuanto choca con un asteroide, éste explosiona llevándonos al final del juego.
![Page 33: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/33.jpg)
33
Primeros pasosPrimeros pasos
En esta minimalística versión no trataremos de crear un clon exacto de Asteroids, simplemente intentaremos haceros conocer las virtudes de wxHaskell.
Para comenzar definiremos las siguientes constantes
height = 300 width = 300 (Definición del espacio del frame) Diameter = 24 (Diámetro del asteroide) chance = 0.1 :: Double (Probabilidad de aparecer un asteroide)
![Page 34: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/34.jpg)
34
Creación de la base del juegoCreación de la base del juego
asteroids :: IO ()asteroids =do g <- getStdGen vrocks <- variable [value := randomRocks g] vship <- variable [value := div width 2]
f <- frame [resizeable := False] t <- timer f [interval := 50,
on command := advance vrocks f ]
set f [text := "Asteroids", bgcolor := white, layout := space width height, on paint := draw vrocks vship, on leftKey := set vship [value :» nx!x¡5], on rightKey := set vship [value :» nx!x+5]]
Definimos la variable asteroids como IO()
Creamos una variable para generar números aleatorios
Vrock es una lista de las futuras posiciones de los asteroides
Vship contiene la posición del eje X de la nave
F la ventana T es un temporizador para
actualizar eventos Establecemos los atributos de la
variable 'f', color de fondo, tamaño, función de dibujado, y asignar funciones a las pulsaciones de teclas
![Page 35: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/35.jpg)
35
Creación de la base del juegoCreación de la base del juego
En lugar de la asignación usual de haskell := hemos usado :~ Esto no realiza una asignación a la variable, sino que le aplica una función.
En el caso de on LeftKey, podríamos usar:on leftKey := set vship [value :~ \x->max 0 (x-5)]
Lo que nos permitiría implementar los bordes de la ventana (frame).Para el caso de on Rightkey, análogamente sería:on rightKey := set vship [value :~ \x->min width (x+5)]
![Page 36: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/36.jpg)
36
Función de generado y avanceFunción de generado y avancede los Asteroidesde los Asteroides
randomRocks :: RandomGen g => g → [[Point ]]randomRocks g = flatten [ ] (map fresh (randoms g))flatten rocks (t : ts) = let now = map head rocks later = filter (not o null) (map tail rocks) in now : flatten (t++later) tsfresh r | r>chance = [ ] | otherwise = [track (floor (fromIntegral width*r =
chance))]track x = [point x (y - diameter) | y ← [0,6... height +2
*diameter]]
Tenemos un generador de números aleatorios, que con él generamos asteroides aleatoriamente.
Cuando generamos un asteroide, lo metemos en una lista, siendo un asteroide una lista de posiciones dentro de la ventana, que va desde arriba, hasta abajo.
![Page 37: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/37.jpg)
37
Función de generado y avanceFunción de generado y avancede los Asteroidesde los Asteroides
advance vrocks f = do set vrocks [value :~ tail] repaint f
draw vrocks vship dc view = do rocks ← get vrocks value x ← get vship value let ship = point x (height - 2*diameter) positions = head rocks collisions = map (collide ship) positions drawShip dc ship mapM (drawRock dc) (zip positions collisions) when (or collisions) (play explode)
La función advance coge el estado actual de la situación de los asteroides y la representa en pantalla.
La función draw especifica lo que hacer en la ventana. Ésta llama a drawShip y drawRock. Es llamada cada 50ms.
dc indica el contexto donde dibujar, puede ser un mapa de bits o una impresora, pero en este caso, es la ventana.
Collide es la función que comprueba que un asteroide choca con la nave
![Page 38: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/38.jpg)
38
Función de dibujado de Función de dibujado de primitivasprimitivas
La nave puede ser representada como una primitiva, al igual que los asteroides:
drawShip dc pos =
circle dc pos (div diameter 2) [brush := brushSolid red]
drawRock dc (pos; collides) =
|collides == true = circle dc pos (div diameter 2) [brush := brushSolid black]
|collides == false = circle dc pos (div diameter 2) [brush := brushSolid yellow]
![Page 39: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/39.jpg)
39
Función de dibujado de mapa Función de dibujado de mapa de bitsde bits
La nave puede ser representada con un mapa de bits, al igual que los asteroides:
drawShip dc pos =
drawBitmap dc ship pos True [ ]
drawRock dc (pos; collides) =
let picture = if collides then burning else rock
in drawBitmap dc picture pos True [ ]
collide pos0 pos1 =
let distance = vecLength (vecBetween pos0 pos1)
in distance ≤ fromIntegral diameter
rock = bitmap "rock.ico"
burning = bitmap "burning.ico"
ship = bitmap "ship.ico"
explode = sound "explode.wav"
![Page 40: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/40.jpg)
40
Generación de la barra de Generación de la barra de menúmenú
Con el símbolo '&' indicamos que la letra J del teclado, tendrá asociada la función de expandir el menú Juego
El campo help, indica qué texto poner en la barra de ayuda de la ventana
game ← menuPane [text := "&Juego"]
new ← menuItem game [text := "&Nuevo\tCtrl+N"
, help := "Empezar nuevo juego"]
pause ← menuItem game [text := "&Pausa\tCtrl+P"
, help := "Pausar el juego"
,checkable := True]
menuLine game
quit ← menuQuit game [help := "Salir del juego"]
set new [on command := asteroids]set pause [on command := set t [enabled :~ not]]set quit [on command := close f ]
La opción 'checkable' añade una marca de selección.
Con el comando 'on command', añadimos una funcionalidad a cada botón.
'new' crea una nueva ventana de juego
Para pausar el juego, tan solo hay que desactivar el temporizador
Por último close f, cierra la ventana
![Page 41: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/41.jpg)
41
Juego finalizadoJuego finalizado
![Page 42: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/42.jpg)
42
BibliografíaBibliografíahttp://haskell.org/haskellwiki/WxHaskellhttp://www.wxwidgets.org/http://www.linformaticien.com/El proyecto Verificación de sitios Web utilizando
Lenguajes funcionales [2005]Haskell Ready to Dazzle the Real World [2005]Slicing wxHaskell modules to derive the User
Interface Abstract Model [2007] http://zenon.dsic.upv.es/muterm/muterm.php
(Del profesor Raúl Gutiérrez herramienta de terminación MU-TERM)
![Page 43: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/43.jpg)
43
MejorasMejorasMateu Villavet profesor de la escuela Politécnica
Superior de la Universidad de Gerona y Salvador Lucas profesor de la Universidad Politécnica de Valencia nos contestó a algunas dudas.
El profesor de la Universidad Politécnica de Valencia que participa en el desarrollo de la herramienta de terminación MU-TERM cuya versión 'de sobremesa' utiliza wxHaskell acerca del procedimiento necesario para instalar WxHaskell
![Page 44: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/44.jpg)
44
Respuesta a preguntas (Mateu Respuesta a preguntas (Mateu Villavet)Villavet)¿Como habéis conseguido instalar
WxHaskell?◦Siguiendo las instrucciones de la Web.
Lo único que tienes que vigilar son las versiones de wxhaskell y del GHC queutilices para la compatibilidad
![Page 45: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/45.jpg)
45
¿Cuantas clases prácticas hacéis de WxHaskell?¿Es fácil de manejar, y de entender?¿se hicieron algunos proyectos en la Universidad de Gerona ? ¿y trabajosde investigación?◦ La práctica de haskell ha sido realizar un juego con wxhaskell. algunos
alumnos han hecho el Pacman. La verdad es que no hay mucha documentación pero el artículo que hay en la sesión 5 de laboratorio
◦ es de gran ayuda:http://ima.udg.edu/Docencia/3105200736/index.htmlSobre un proyecto final de carrera hecho con GHC y wxHaskell paraaprender lambda-cálculo puedes visitar:http://ima.udg.edu/~villaret/tilc/TILC-Presentation.htmlSi quieres comentárselo a tu profesor por si desea utilizarlo en casoque estudiéis lambda cálculo.
Respuesta a preguntas (Mateu Respuesta a preguntas (Mateu Villavet)Villavet)
![Page 46: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/46.jpg)
46
Respuesta a preguntas (Salvador Respuesta a preguntas (Salvador Lucas)Lucas)¿Cuantas clases se dedican a WxHaskell?
◦No dedicamos ninguna clase a wxHaskell. En realidad, los alumnos utilizan un móduloHaskell que yo les proporciono para integrar la práctica que realizan y poder utilizarla con una interfaz gráfica realizada en wxHaskell. No necesitan conocer nada sobre la librería...
![Page 47: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/47.jpg)
47
Respuesta a preguntas (Salvador Respuesta a preguntas (Salvador Lucas)Lucas)¿Es fácil el uso de WxHaskell?
◦Es relativamente fácil, una vez que te familiarizas con la manera de especificar la interfaz gráfica y tratar la interacción mediante eventos, etc.
![Page 48: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/48.jpg)
48
Respuesta a preguntas (Raúl Respuesta a preguntas (Raúl Gutiérrez)Gutiérrez)¿Cómo se instala WxHaskell?
◦te recomiendo que te instales cabal, ya que es la mejor forma para trabajar y descargarte paquetes de haskell: http://www.haskell.org/cabal/ y después instalar el paquete con:cabal install wx-core wx
![Page 49: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/49.jpg)
49
MejorasMejorasTambién nos pusimos en contacto con el
profesor Doaitse Swierstra de la Universidad de Utrecht
![Page 50: Rafael Díaz Rojas Amin Harou Daniel López Sánchez](https://reader035.vdocuments.pub/reader035/viewer/2022062314/5681365c550346895d9de765/html5/thumbnails/50.jpg)
50
Respuesta a preguntas (Doaitse Respuesta a preguntas (Doaitse Swierstra)Swierstra)¿Podría funcionar el UHC para instalar
WxHaskell?◦ La instalación de WxHaskell en sí no es realmente un
problema hoy en día, solo hace falta lograr la correcta combinación de sistema operativo, WxWidgets y WxHaskell GHC.
◦ En la actualidad, todavía le faltan muchas cosas a WxHaskell para ejecutar programas con UHC, esperemos que este problema se subsane en el futuro
◦ Para instalar WxHaskell en Ubuntu podéis seguir estas instrucciones que fueron producidas por uno de nuestros estudiantes:http://www.students.cs.uu.nl/~jfklein/fp/Install_wxhaskell_on_ubuntu.txt