10
votes

Y a-t-il des frameworks web de haskell supplémentaires originaux et plus fonctionnels?

J'ai regardé Haskell Web Frameworks comme Snap and Yesod. La plupart semblent mettre en œuvre une approche MVC-ISH me rappelant des cadres Web comme Ruby sur rails. Oui, MVC peut être atteint avec la FP, mais IMHO, cela ne montre pas les grands avantages d'une approche FP. Comme HTTP est un protocole apatride, j'aurais espéré qu'il pourrait y avoir un cadre de haskell qui prend une approche fonctionnelle plus originale et plus pure. Y a-t-il?


9 commentaires

HTTP peut être apatride, mais les applications Web ne sont certainement pas.


Eh bien, les applications Web Mimic State entre les demandes avec des choses comme l'état de la session, mais il y a peu de raisons intrinsèques d'avoir un État. C'est juste que les développeurs sont tellement utilisés pour regarder la résolution de cette façon (comme utiliser des sessions côté serveur)


@ WautreB: Les sessions côté serveur offrent des économies de sécurité / bande passante qui seraient plus difficiles à réaliser si chaque pièce de données a été déchargée sur le client et devait être transmise à chaque demande. Bien entendu, avec HTML5 à venir, le stockage des données de session sur le côté client pourrait devenir plus facile grâce à la DB SQLite intégrée; Il ne résout pas la question de la sécurité, bien sûr. Toujours une question intéressante :)


@Matthieu C'est exactement ce que je pense qu'un cadre Web de style FP approprié ne doit jamais permettre. Le concept dont vous parlez de sons comme la ViewState utilisée dans ASP.NET pour simuler un environnement avec l'état. Oui, vous avez une entrée et une sortie dans votre application Web, mais vous n'avez pas besoin d'un état partagé entre plusieurs problèmes de vie de demande.


@ Wwardb: Ne nécessitant aucun État est une jolie déclaration audacieuse, par exemple sur Amazon, je peux sélectionner plusieurs livres avant de payer. Bien sûr, vous pouvez transférer la liste des livres sélectionnés sur chaque demande ... mais cela ne fonctionne pas bien quand on utilise le Backbutton: /


@ WautreB: Je dirais qu'un webframework qui ne vous permettrait pas d'accéder aux bases de données est assez inutile pour la grande majorité des webapps. Mais si votre sortie peut dépendre uniquement des paramètres de la demande (et non du contenu de la base de données).


@ SEPP2K: HONECOURS Il doit être une base de données, mais je pense qu'une approche plus fonctionnelle d'un cadre Web n'a pas besoin de sessions de serveur ou de construire une réponse à l'aide de MONADS pour simuler l'état.


@ Wwardb: fwiw, Yesod n'utilise pas les sessions de serveur, plutôt des sessions clientes. Mais je pense que cette distinction n'a pas de sens pour comment "fonctionnel" le cadre est.


@ WautreB: Vous parlez de programmation fonctionnelle comme s'il s'agissait d'éviter l'état. Il ne s'agit pas d'éviter l'état autant qu'il s'agit de fournir à une machinerie de travailler avec elle de manière sûre.


4 Réponses :


2
votes

Cela dépend de ce que vous essayez d'atteindre. Si de manière apatride, vous voulez réellement dire apatrides, j'utilise le cadre de modèles hakyll pour générer des pages statiques. Il a une structure intéressante pour faire face aux dépendances et aux mises à jour des fichiers.


4 commentaires

Je ne voulais pas dire des pages statiques. Juste aucun état partagé entre les demandes / la réponse ou les effets secondaires


S'il n'y a pas d'état partagé, et aucun effet secondaire ... Que pouvez-vous faire ces pages statiques?


@Carl: Le contenu de la page peut être généré de manière dynamique (en fonction des paramètres de la demande).


Je suppose qu'il peut ensuite mettre en œuvre une simple dispatching en fonction des paramètres de la demande, servant la bonne page statique de cette façon.



9
votes

Je ne suis pas sûr des fonctionnalités de FP que vous souhaitez qu'un cadre soit utilisé, mais je pense que Yesod utilise certaines fonctionnalités pour un grand bénéfice. (Happstack fait aussi bien, mais je ne suis tout simplement pas aussi familier avec cela.)

  • Les URL de type-Safe-Safe éliminent toute une classe entière de bogues générées en utilisant automatiquement la validation d'entrée.

  • Une bonne dactylographie élimine pratiquement les attaques XSS.

  • Selon le champ d'application des données que vous avez concernées, l'utilisation de STM ou de MVARS pour vos besoins de stockage facilite l'évitée les conditions de course et les blocages dans des applications multi-filetées.

    Je suis sûr qu'il y a beaucoup plus que je ne pense pas, mais j'espère que cela fait le point. Mais peut-être que ce que vous cherchez, c'est quelque chose comme un cadre basé sur la continuation. Personnellement pense qu'ils sont une mauvaise idée (je suis un croyant au repos), mais je suppose que cela pourrait sembler plus "fonctionnel".


1 commentaires

Merci pour votre réponse. Ma compréhension des continuations est que cela est en fait beaucoup sur l'état. L'utilisation du modèle dans le développement web tente d'atteindre un environnement stipulable simulé.



1
votes

Je cherchais le même mais je ne l'ai pas vraiment trouvé. Spécifiquement, je cherchais une approche de continuité qui rend les sessions HTTP traditionnelles inutiles. Ces sortes de cadres sont assez populaires dans le système. Le plus proche que j'ai trouvé était la réponse de Chris Eidhof au défi de l'ARC: -

https://gist.github.com/260052

C'est un prototype saptchy et probablement de nombreux hommes-mois à l'abri de quelque chose que vous pourriez utiliser pour un travail sérieux. Si mes compétences de Haskell étaient meilleures, je pourrais être tenté d'essayer de le développer.

Je crois aussi que Wash a également pris cette approche, mais cela semble être mort. Je crains de mes espoirs sur MySnapsession, car je pense que cela examine également une installation de session basée sur la poursuite qui serait passionnante parce que j'ai été très impressionné par la qualité du reste du repos et de l'élan derrière cela.


0 commentaires

2
votes

Je pense que Wardb ne demandait pas de types de fantaisie, mais plutôt de la sémantique dénotative / apatride de la FP, contrairement à la sémantique impérative / nondénotale (et souvent non négliniste) des choses comme IO et STM. C'est cet aspect dénotant qui soutient le raisonnement précis et équitable. Le terme "fonctionnel" a été étiré pour adopter une programmation impérative / non présentée, ce qui conduit souvent à la confusion. Peter Landin recommandé remplacer "fonctionnel" "Avec" dénotatif "pour aider à éclaircir exactement ce type de confusion.

Je ne connais pas de cadres Web Haskell dénotatifs (non imperatifs). Vous auriez probablement besoin de casser des habitudes mentales impératives de longue date. Ce qui est à dire: travail intéressant!


0 commentaires