2011-04-23 14 views
6

Este es mi primer programa con Haskell. Lo escribo para poner en práctica todo lo que he leído sobre FP. Lo primero que trato de averiguar es cómo modelar los datos que sacaré de mi base de datos (eventualmente escribiré en la base de datos). Empecé con mi mesa users y escribí algo como estoEstructuras de datos de Haskell para la aplicación respaldada por DB

module Model (User) where 

class Audited a where 
    creationDate :: a -> Integer 
    lastUpdatedDate :: a -> Integer 
    creationUser :: a -> User 
    lastUpdatedUser :: a -> User 

class Identified a where 
    id :: a -> Integer 

data User = User {userId :: Integer} 

instance Identified User where 
    id u = userId u 

y

module Main (main) where 
import Model (User) 

data Point = Pt {pointx, pointy :: Float} 

instance Show Point where 
    show (Pt x y) = "(" ++ show x ++ ", " ++ show y ++ ")" 

main :: IO() 
main = do 
    print $ Pt 1 2 

(El Point material es sólo yo probando ... este es mi primer código Haskell nunca)

Este código no se compila, pero aún no estoy realmente preocupado por eso, lo más importante es configurar mis tipos de una buena manera.

Aquí es una lista de preguntas que tengo

  • ¿Cuál es la mejor manera de modelar los datos basados ​​en registros en Haskell?
  • La mayoría de mis tablas tienen información de auditoría e identidades opacas. ¿Cómo puedo aprovechar esto usando el sistema de tipo Haskell? Puede ver que creé clases auditadas e identificadas. ¿Es este un buen enfoque?
  • ¿Es esta una buena aplicación para Haskell? Estaba considerando usar Clojure porque podría interactuar con Java (esta aplicación está actualmente escrita en Java).
+1

Por cierto, no es una buena idea definir una función 'id'. Por lo general, 'id' es la función de identidad definida como' id x = x' y, por lo tanto, bastante importante. – fuz

+0

Hola. Veo que estás usando Haskell con una base de datos, y también código en Scala. ¿Puedes echar un vistazo a mi pregunta, por favor? ¿Cómo lidiar con una base de datos cuando tienes objetos inmutables como generalmente hacemos en FP? ¿Utiliza clases mutables para el acceso a datos? http://stackoverflow.com/questions/12882099/how-to-update-object-in-mongo-with-an-immutable-salat-case-class –

Respuesta

8

¿Cuál es la mejor manera de modelar datos basados ​​en registros?

Como tipo de datos algebraicos con posibles componentes de registro (Haskell).

Ejemplo simple: the JSValue data type, que representa registros JSON.

¿Cómo puedo aprovechar el sistema de tipo Haskell?

Las interfaces en Haskell a través de clases de tipo son un enfoque válido, aunque el uso de newtype u otro tipo de datos, y no exportar sus constructores proporciona propiedades de abstracción igualmente fuertes. Al igual que el uso de tipo existencial o tipo de datos algebraicos generalizados (GADT).

Ejemplo: Mire p. cómo se usa newtypein this example.

Ejemplo: newtype como se utiliza para agregar tipo de seguridad y abstracción a la biblioteca PCRE.

¿Es esta una buena aplicación para Haskell?

Parece perfectamente cromulento. Los tipos fuertes, FFI potente y un montón de libraries on Hackage para ayudar significa que tiene mucha tecnología para ayudar a hacer el trabajo.

Ejemplo: hay muchas, muchas bibliotecas de descriptor de acceso de base de datos para Haskell, tales como:

y el venerable hdbc, que es also documented in RWH.

Y buenos paquetes de alto nivel para magically persistening Haskell data.

Así que hay muchas opciones y muchos ejemplos para empezar.

+0

Gracias por la respuesta. Soy un Haskell nube. Sería realmente increíble si pudieras dar un par de ejemplos cortos de lo que estás hablando. –

Cuestiones relacionadas