iva*_*ble 6 django functional-programming
我想开始做一些形式的Web开发,目的是构建最终可能成为初创产品的Web应用程序.很长一段时间以来,我一直对函数式编程非常好奇,而且在我心里的某个秘密地相信你在抽象级别上越高,你拥有的权力就越多(隐藏的假设:函数式编程比程序性抽象更抽象).
因此,鉴于我所拥有的小型Web开发经验,是否有任何功能性语言/框架可以开始学习Web开发?
另一种方法是坚持使用成熟的程序化Web框架(可能是Django),首先学习Web开发的绳索,然后考虑函数式编程.但是,如果我最终切换到函数式编程,那么所有的工作都会被"浪费".
我对C++,Objective-C/Cocoa,熟悉Python有很好的经验.
编辑:很多人建议F#.但我很乐意(对其他人没有冒犯),远离.NET平台和其他MS生态系统.
有了 Haskell,当然可以使用 CGI 来编写 Web 应用程序。看:
尽管使用 haskell,应用程序需要编译和部署(在服务器上或在类似于服务器的环境中编译)。
我最近在玩这个……总的来说,我觉得这并不比使用正常的(从统计学上来说)语言难多少。下面是代码的示例(遵循某种 MVC 方法):
CGI.hs:
module CGITest.CGI where
import Network.CGI
import qualified CGITest.Views as V
import qualified CGITest.Data as D
cgiMain = runCGI (handleErrors (do
rows <- liftIO D.getAllData
output $ V.drawPage $ V.drawTable rows
))
Run Code Online (Sandbox Code Playgroud)
数据.hs:
module CGITest.Data where
import qualified Data.Map as Map
import Database.HDBC
import Database.HDBC.Sqlite3
getAllData :: IO [Map.Map String SqlValue]
getAllData = do
conn <- connectSqlite3 "C:\\Personal\\code\\Code\\Haskell\\CGITest\\test.db"
statement <- prepare conn "SELECT * FROM Test"
execute statement []
rows <- fetchAllRowsMap statement
return rows
Run Code Online (Sandbox Code Playgroud)
视图.hs:
module CGITest.Views where
import qualified Data.Map as Map
import Data.Map ((!))
import Prelude hiding (div, id)
import Text.HTML.Light hiding (head)
import qualified Text.HTML.Light as H
import Text.XML.Light.Types (Content)
import Text.XML.Light
import Text.JSON
import Text.JSON.String
import Database.HDBC
tbody z e = Elem (Element (unqual "tbody") z e Nothing)
thead z e = Elem (Element (unqual "thead") z e Nothing)
drawPage x = renderXHTML xhtml_1_0_transitional $
html [] [
H.head [] [
title [] [cdata "Testing Haskell CGI"]
],
body [] [
div [id "outer-container"] [
div [id "inner-container"] x,
cdata $ show testJ
]
]
]
drawRow columns =
tr [class' "row"] [
td [] [cdata $ fromSql $ columns ! "id"],
td [] [cdata $ fromSql $ columns ! "name"]
]
where
tId = "row-" ++ (fromSql $ columns ! "id")
drawTable rows =
[
table [border "1"] [
thead [] [
tr [] [
th [] [cdata "ID"],
th [] [cdata "Name"]
]
],
tbody [] $ map drawRow rows
]
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |