haskell programador. usando F #. no hay clases de tipos en F #. ¿Qué usar cuando necesito clases de tipo?alternativa a las clases de tipos?
Respuesta
Haga check out this como alguien sugirió.
Creo que la respuesta corta es pasar diccionarios de operaciones (como lo haría Haskell bajo el capó, el testigo de la instancia).
O cambie el diseño para que no necesite tipos de clases. (Esto siempre es doloroso, ya que las clases de tipo son lo mejor y es difícil dejarlas atrás, pero antes de que surgieran Haskell y las clases tipográficas, la gente todavía podía programar durante 4 décadas anteriormente sin clases de letra, así que haz lo mismo que hicieron esas personas .)
También puede obtener algunas maneras con inline
restricciones de miembros estáticos, pero eso se pone feo rápidamente.
Aquí está un ejemplo de diccionario de operaciones:
// type class
type MathOps<'t> = { add : 't -> 't -> 't; mul: 't -> 't -> 't } //'
// instance
let mathInt : MathOps<int> = { add = (+); mul = (*) }
// instance
let mathFloat : MathOps<float> = { add = (+); mul = (*) }
// use of typeclass (normally ops would the 'constraint' to the left of
// the '=>' in Haskell, but now it is an actual parameter)
let XtimesYplusZ (ops:MathOps<'t>) x y z = //'
ops.add (ops.mul x y) z
printfn "%d" (XtimesYplusZ mathInt 3 4 1)
printfn "%f" (XtimesYplusZ mathFloat 3.0 4.0 1.0)
@Brian: "las clases de tipos son lo mejor que hay". Me encantaría ver un ejemplo en el que las clases de tipos resuelvan un problema real que no se resolvió mejor con otra técnica. Además, su ejemplo actualiza el diccionario de operaciones en lugar de definirlas con la definición de tipo original. ¿Es eso posible con las clases de tipo? –
@Jon Harrop: ¿Qué? Por supuesto que es. La definición de clases de tipos e instancias está completamente separada de la definición de tipos. Ni siquiera tienen que estar en el mismo módulo. Si la memoria me sirve, la versión de Scala es aún más poderosa y te permite tener definiciones con alcance local (pero no conozco a Scala, así que puedo estar confundido). –
@camccann: Ah sí, por supuesto. Es por eso que no puede confiar en que se resuelvan estáticamente por lo que su desempeño podría ser el de boxeo y despacho en lugar de una instrucción MLA, un rendimiento que degrada impredeciblemente en un orden de magnitud como lo hace en el ejemplo de Brian. –
- 1. Distinción entre las clases de tipos MonadPlus, Alternativa y Monoid?
- 2. Ejemplo de clases internas utilizadas como alternativa a las interfaces
- 3. Alternativa a las cookies
- 4. Accediendo a tipos de clases base dependientes
- 5. parámetros de tipos múltiples en las clases de tipo haskell
- 6. memoization y clases de tipos
- 7. ¿Por qué las clases de tipos fueron difíciles de implementar?
- 8. Tipos y clases de variables
- 9. clases de tipos en los tipos de datos de Haskell
- 10. Tipos y clases en Python
- 11. Tipos de métodos dependientes y clases de tipos
- 12. ¿Por qué Haskell no llega a inferir las clases de tipos de datos en las firmas de funciones?
- 13. ¿Implementar un comportamiento común en alternativa a las clases base abstractas?
- 14. LINQ - tipos de clases específicos de grupo
- 15. Utilizando el sistema de tipos de Haskell para especificar que una clase obedece propiedades adicionales (es decir, clases de tipos para las clases de tipos)
- 16. Alternativa a las Preferencias en Java
- 17. ORM apoyo a las clases inmutables
- 18. python: alternativa a las funciones anónimas
- 19. Ventajas del subtipado sobre clases de tipos
- 20. ¿Alternativa a SvcUtil.exe?
- 21. Alternativas a las clases básicas de reparación de monos
- 22. Prestaciones de estructuras frente a las clases
- 23. Argumentos a las clases de controlador web.py
- 24. ¿Alternativa a Dreamweaver?
- 25. Buscar todos los tipos principales (tanto las clases base como las interfaces)
- 26. Agregando campos con nombre variable a las clases de Python
- 27. Alternativa multiplataforma a COM
- 28. Alternativa a las declaraciones de reenvío cuando no desea #include
- 29. La mejor alternativa a las variables globales de MATLAB
- 30. Alternativa ligera a Sammy.js
No estoy seguro si esto es un duplicado, pero al menos las respuestas a esta pregunta son altamente relevantes: http://stackoverflow.com/ questions/501069/f-functions-with-generic-parameter-types – Chuck
¿Puede dar un ejemplo concreto de cuándo "necesita tipos de clases"? –
@Jon Harrop: ¿Puedes dar un ejemplo concreto de cuándo "necesitas" alguna función de idioma? Al final, una vez que tienes la equivalencia de Turing, todo lo demás es solo sintaxis y conveniencia. Las clases de tipo son el enfoque más expresivo del polimorfismo ad-hoc con el que estoy familiarizado. ¿Crees que el polimorfismo de subtipos y la sobrecarga de miembros son útiles? –