ภาษาแฮสเคิล (อังกฤษ: Haskell) /ˈhæskəl/ เป็นภาษาโปรแกรมที่มีวัตถุประสงค์เพื่อใช้การใช้งานที่หลากหลาย (general-purpose) ที่มีการไทป์แบบคงที่ (statically typed) ภาษาแฮสเคิลเป็นภาษาโปรแกรมเชิงฟังก์ชั่นแบบบริสุทธ์ (purely functional programming language) ที่มีลักษณะพิเศษคือการคาดคะเนไทป์ (type inference) และการประเมินผลแบบขี้เกียจ (lazy evaluation). ภาษาแฮสเคิลพัฒนาขึ้นเพื่อการเรียนการสอน การวิจัย รวมไปถึงการประยุกต์ใช้ในเชิงธุรกิจและอุตสาหกรรม ภาษาแฮสเคิลเป็นแรงบันดาลใจให้กับภาษาโปรแกรมอื่น ๆ ที่มีความซับซ้อนอีกหลายภาษาให้มีฟีเจอร์แบบไทป์คลาส (type classes) ซึ่งทำให้ป้องกันการเออเรอร์ของไทป์ ทำให้การโอเปอเรเตอร์โอเวอร์โหลดดิ้ง (operator overloading) มีความปลอดภัยในการใช้ไทป์ หรือ มีไทป์เซฟตี้ (type-safe) มากขึ้น คอมไพเลอร์หลักสำหรับภาษาแฮสเคิลคือ คอมไพเลอร์กลาสโกลว์แฮสเคิล (Glasgow Haskell Compiler หรือ GHC) ภาษาแฮสเคิลตั้งชื่อตามนักตรรกศาสตร์ชาวอเมริกัน แฮสเคิล เคอร์รี่ (Haskell Curry)
กระบวนทัศน์ | |
---|---|
, Dave Barton, Brian Boutel, Warren Burton, Joseph Fasel, Kevin Hammond, Ralf Hinze, , , Thomas Johnsson, Mark Jones, , , , John Peterson, Alastair Reid, Colin Runciman, | |
เริ่มเมื่อ | 1990 |
รุ่นเสถียร | Haskell 2010 / กรกฎาคม 2010 |
รุ่นทดลอง | Haskell 2020 announced |
ระบบชนิดตัวแปร | , , |
ระบบปฏิบัติการ | Cross-platform |
นามสกุลของไฟล์ | .hs, .lhs |
เว็บไซต์ | www |
, , NHC, JHC, , UHC | |
ภาษาย่อย | |
, | |
ได้รับอิทธิพลจาก | |
,,, and Hope+,,,,,, and ,, ,, | |
ส่งอิทธิพลต่อ | |
,,/,C#/, CAL,[],,,,,, ,[],,,,,,Java/,,,,[],Python,,Rust,,,,Visual Basic 9.0 |
อรรถศาสตร์ (semantics) หรือ คำต่าง ๆ ที่ใช้โค้ดภาษาแฮสเคิลมีต้นกำเนิดทางประวัติศาสตร์จากภาษามิแรนด้า (Miranda) ซึ่งเป็นภาษาที่กลุ่มนักวิทยาศาสตร์คอมพิวเตอร์ที่ร่วมกันสร้างภาษาแฮสเคิลใช้ในการต่อยอด การกำหนดคุณลักษณะอย่างเป็นทางการสำหรับภาษาแฮสเคิลครั้งสุดท้ายมีขึ้นในเดือนกรกฎาคม ค.ศ.2010 (พ.ศ.2553) ส่วนการพัฒนาคอมไพเลอร์ GHC นั้นมีการปรับปรุงและพัฒนาอยู่เรื่อยมาและทำการขยายศักยภาพของภาษาแฮสเคิลขึ้นไปเรื่อย ๆ
มีการใช้ภาษาแฮสเคิลในการวิจัยเชิงวิชาการ และภาคธุรกิจอุตสาหกรรมต่าง ๆ ในเดือนกันยายน ค.ศ.2020 (พ.ศ.2563) แฮสเคิลเป็นภาษาที่ได้รับความนิยมในการค้นใน Google เป็นอันดับที่ 28 ในส่วนของผู้ใช้ที่ยังแอคทีฟอยู่บนแพลตฟอร์ม GitHub ในส่วนของ source code repository มี source code ภาษาแฮสเคิลเพียง 1% เท่านั้น
ตัวอย่างโค้ด
การเขียนโปรแกรม "Hello, World!" program ใน Haskell (only the last line is strictly necessary):
module Main (main) where -- not needed in interpreter, is the default in a module file main :: IO () -- the compiler can infer this type definition main = putStrLn "Hello, World!"
การเขียนฟังก์ชั่นแฟกทอเรียล (factorial) ในแฮสเคิลสามารถเขียนได้หลายแบบ:
-- Type annotation (optional, same for each implementation) factorial :: (Integral a) => a -> a -- Using recursion (with the "ifthenelse" expression) factorial n = if n < 2 then 1 else n * factorial (n - 1) -- Using recursion (with pattern matching) factorial 0 = 1 factorial n = n * factorial (n - 1) -- Using recursion (with guards) factorial n | n < 2 = 1 | otherwise = n * factorial (n - 1) -- Using a list and the "product" function factorial n = product [1..n] -- Using fold (implements "product") factorial n = foldl (*) 1 [1..n] -- Point-free style factorial = foldr (*) 1 . enumFromTo 1
อ้างอิง
- Hudak et al. 2007.
- Marlow, Simon (24 November 2009). "Announcing Haskell 2010". Haskell (Mailing list). สืบค้นเมื่อ 12 March 2011.
- Riedel, Herbert (28 April 2016). "ANN: Haskell Prime 2020 committee has formed". Haskell-prime (Mailing list). สืบค้นเมื่อ 6 May 2017.
- Peyton Jones 2003, p. xi
- Norell, Ulf (2008). "Dependently Typed Programming in Agda" (PDF). Gothenburg: Chalmers University. สืบค้นเมื่อ 9 February 2012.
- Hudak et al. 2007, pp. 12–38, 43.
- ; Sutton, Andrew (2011). "Design of Concept Libraries for C++" (PDF). คลังข้อมูลเก่าเก็บจากแหล่งเดิม (PDF)เมื่อ 10 February 2012.
{{}}
: Cite journal ต้องการ|journal=
((help)) - Hudak et al. 2007, pp. 12-45–46.
- (2006). "Confessions of a Used Programming Language Salesman: Getting the Masses Hooked on Haskell". Oopsla 2007. 10.1.1.72.868.
- Meijer, Erik (1 October 2009). "C9 Lectures: Dr. Erik Meijer – Functional Programming Fundamentals, Chapter 1 of 13". . Microsoft. คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2012-06-16. สืบค้นเมื่อ 9 February 2012.
- Drobi, Sadek (4 March 2009). "Erik Meijer on LINQ". InfoQ. QCon SF 2008: C4Media Inc. สืบค้นเมื่อ 9 February 2012.
{{}}
: CS1 maint: location () - Hickey, Rich. "Clojure Bookshelf". Listmania!. คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 3 October 2017. สืบค้นเมื่อ 3 October 2017.
- Heller, Martin (18 ตุลาคม 2011). "Turn up your nose at Dart and smell the CoffeeScript". . สืบค้นเมื่อ 2020-07-15.
- "Declarative programming in Escher" (PDF). สืบค้นเมื่อ 7 October 2015.
- ; Granicz, Adam; Cisternino, Antonio (2007). Expert F#. . p. 2.
F# also draws from Haskell particularly with regard to two advanced language features called sequence expressions and workflows.
- Wechsung, Ingo. "The Frege Programming Language" (PDF). สืบค้นเมื่อ 26 February 2014.
- "Facebook Introduces 'Hack,' the Programming Language of the Future". WIRED. 20 March 2014.
- "Idris, a dependently typed language". คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2021-05-11. สืบค้นเมื่อ 26 October 2014.
- "LiveScript Inspiration". สืบค้นเมื่อ 4 February 2014.
- Freeman, Phil (2016). "PureScript by Example". Leanpub. สืบค้นเมื่อ 23 April 2017.
- Kuchling, A. M. "Functional Programming HOWTO". Python v2.7.2 documentation. Python Software Foundation. สืบค้นเมื่อ 9 February 2012.
- "Glossary of Terms and Jargon". Perl Foundation Perl 6 Wiki. . คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 21 January 2012. สืบค้นเมื่อ 9 February 2012.
- "The Rust Reference: Appendix: Influences". สืบค้นเมื่อ 3 February 2016.
- Fogus, Michael (6 August 2010). "MartinOdersky take(5) toList". Send More Paramedics. สืบค้นเมื่อ 9 February 2012.
- Lattner, Chris (3 June 2014). "Chris Lattner's Homepage". Chris Lattner. สืบค้นเมื่อ 3 June 2014.
The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
- "Timber/History". คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2020-10-31. สืบค้นเมื่อ 7 October 2015.
- Chevalier, Tim (28 January 2008). "anybody can tell me the pronunciation of "haskell"?". Haskell-cafe (Mailing list). สืบค้นเมื่อ 12 March 2011.
- Type inference originally using
- Peyton Jones 2003.
- Edward Kmett, Edward Kmett – Type Classes vs. the World
- "Haskell in education". สืบค้นเมื่อ 15 February 2016.
- "Haskell in research". สืบค้นเมื่อ 15 February 2016.
- Mossberg, Erik (2020-06-08), erkmos/haskell-companies, สืบค้นเมื่อ 2020-06-22
- "Haskell in industry - HaskellWiki". wiki.haskell.org. สืบค้นเมื่อ 2020-06-22.
- "PYPL PopularitY of Programming Language index". pypl.github.io (ภาษาอังกฤษ). 22 January 2021. คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 17 September 2020. สืบค้นเมื่อ 22 January 2021.
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
phasaaehsekhil xngkvs Haskell ˈ h ae s k el epnphasaopraekrmthimiwtthuprasngkhephuxichkarichnganthihlakhlay general purpose thimikarithpaebbkhngthi statically typed phasaaehsekhilepnphasaopraekrmechingfngkchnaebbbrisuthth purely functional programming language thimilksnaphiesskhuxkarkhadkhaenithp type inference aelakarpraeminphlaebbkhiekiyc lazy evaluation phasaaehsekhilphthnakhunephuxkareriynkarsxn karwicy rwmipthungkarprayuktichinechingthurkicaelaxutsahkrrm phasaaehsekhilepnaerngbndalicihkbphasaopraekrmxun thimikhwamsbsxnxikhlayphasaihmifiecxraebbithpkhlas type classes sungthaihpxngknkarexxerxrkhxngithp thaihkaroxepxeretxroxewxrohldding operator overloading mikhwamplxdphyinkarichithp hrux miithpesfti type safe makkhun khxmiphelxrhlksahrbphasaaehsekhilkhux khxmiphelxrklasoklwaehsekhil Glasgow Haskell Compiler hrux GHC phasaaehsekhiltngchuxtamnktrrksastrchawxemrikn aehsekhil ekhxrri Haskell Curry aehsekhil Haskell krabwnthsn Dave Barton Brian Boutel Warren Burton Joseph Fasel Kevin Hammond Ralf Hinze Thomas Johnsson Mark Jones John Peterson Alastair Reid Colin Runciman erimemux1990 34 pithiaelw 1990 runesthiyrHaskell 2010 krkdakhm 2010 14 pithiaelw 2010 07 runthdlxngHaskell 2020 announcedrabbchnidtwaepr rabbptibtikarCross platformnamskulkhxngifl hs lhsewbistwww wbr haskell wbr org NHC JHC UHCphasayxy idrbxiththiphlcak and Hope and sngxiththiphltx C 11 C CAL txngkarxangxing txngkarxangxing Java txngkarxangxing Python Rust Visual Basic 9 0 xrrthsastr semantics hrux khatang thiichokhdphasaaehsekhilmitnkaenidthangprawtisastrcakphasamiaernda Miranda sungepnphasathiklumnkwithyasastrkhxmphiwetxrthirwmknsrangphasaaehsekhilichinkartxyxd karkahndkhunlksnaxyangepnthangkarsahrbphasaaehsekhilkhrngsudthaymikhunineduxnkrkdakhm kh s 2010 ph s 2553 swnkarphthnakhxmiphelxr GHC nnmikarprbprungaelaphthnaxyueruxymaaelathakarkhyayskyphaphkhxngphasaaehsekhilkhuniperuxy olokphasaaehsekhil mikarichphasaaehsekhilinkarwicyechingwichakar aelaphakhthurkicxutsahkrrmtang ineduxnknyayn kh s 2020 ph s 2563 aehsekhilepnphasathiidrbkhwamniyminkarkhnin Google epnxndbthi 28 inswnkhxngphuichthiyngaexkhthifxyubnaephltfxrm GitHub inswnkhxng source code repository mi source code phasaaehsekhilephiyng 1 ethanntwxyangokhdkarekhiynopraekrm Hello World program in Haskell only the last line is strictly necessary module Main main where not needed in interpreter is the default in a module file main IO the compiler can infer this type definition main putStrLn Hello World karekhiynfngkchnaefkthxeriyl factorial inaehsekhilsamarthekhiynidhlayaebb Type annotation optional same for each implementation factorial Integral a gt a gt a Using recursion with the ifthenelse expression factorial n if n lt 2 then 1 else n factorial n 1 Using recursion with pattern matching factorial 0 1 factorial n n factorial n 1 Using recursion with guards factorial n n lt 2 1 otherwise n factorial n 1 Using a list and the product function factorial n product 1 n Using fold implements product factorial n foldl 1 1 n Point free style factorial foldr 1 enumFromTo 1xangxingHudak et al 2007 sfn error no target CITEREFHudakHughesPeyton JonesWadler2007 Marlow Simon 24 November 2009 Announcing Haskell 2010 Haskell Mailing list subkhnemux 12 March 2011 Riedel Herbert 28 April 2016 ANN Haskell Prime 2020 committee has formed Haskell prime Mailing list subkhnemux 6 May 2017 Peyton Jones 2003 p xiharvnb error no target CITEREFPeyton Jones2003 Norell Ulf 2008 Dependently Typed Programming in Agda PDF Gothenburg Chalmers University subkhnemux 9 February 2012 Hudak et al 2007 pp 12 38 43 sfn error no target CITEREFHudakHughesPeyton JonesWadler2007 Sutton Andrew 2011 Design of Concept Libraries for C PDF khlngkhxmulekaekbcakaehlngedim PDF emux 10 February 2012 a href wiki E0 B9 81 E0 B8 A1 E0 B9 88 E0 B9 81 E0 B8 9A E0 B8 9A Cite journal title aemaebb Cite journal cite journal a Cite journal txngkar journal help Hudak et al 2007 pp 12 45 46 sfn error no target CITEREFHudakHughesPeyton JonesWadler2007 2006 Confessions of a Used Programming Language Salesman Getting the Masses Hooked on Haskell Oopsla 2007 10 1 1 72 868 Meijer Erik 1 October 2009 C9 Lectures Dr Erik Meijer Functional Programming Fundamentals Chapter 1 of 13 Microsoft khlngkhxmulekaekbcakaehlngedimemux 2012 06 16 subkhnemux 9 February 2012 Drobi Sadek 4 March 2009 Erik Meijer on LINQ InfoQ QCon SF 2008 C4Media Inc subkhnemux 9 February 2012 a href wiki E0 B9 81 E0 B8 A1 E0 B9 88 E0 B9 81 E0 B8 9A E0 B8 9A Cite news title aemaebb Cite news cite news a CS1 maint location lingk Hickey Rich Clojure Bookshelf Listmania khlngkhxmulekaekbcakaehlngedimemux 3 October 2017 subkhnemux 3 October 2017 Heller Martin 18 tulakhm 2011 Turn up your nose at Dart and smell the CoffeeScript subkhnemux 2020 07 15 Declarative programming in Escher PDF subkhnemux 7 October 2015 Granicz Adam Cisternino Antonio 2007 Expert F p 2 F also draws from Haskell particularly with regard to two advanced language features called sequence expressions and workflows Wechsung Ingo The Frege Programming Language PDF subkhnemux 26 February 2014 Facebook Introduces Hack the Programming Language of the Future WIRED 20 March 2014 Idris a dependently typed language khlngkhxmulekaekbcakaehlngedimemux 2021 05 11 subkhnemux 26 October 2014 LiveScript Inspiration subkhnemux 4 February 2014 Freeman Phil 2016 PureScript by Example Leanpub subkhnemux 23 April 2017 Kuchling A M Functional Programming HOWTO Python v2 7 2 documentation Python Software Foundation subkhnemux 9 February 2012 Glossary of Terms and Jargon Perl Foundation Perl 6 Wiki khlngkhxmulekaekbcakaehlngedimemux 21 January 2012 subkhnemux 9 February 2012 The Rust Reference Appendix Influences subkhnemux 3 February 2016 Fogus Michael 6 August 2010 MartinOdersky take 5 toList Send More Paramedics subkhnemux 9 February 2012 Lattner Chris 3 June 2014 Chris Lattner s Homepage Chris Lattner subkhnemux 3 June 2014 The Swift language is the product of tireless effort from a team of language experts documentation gurus compiler optimization ninjas and an incredibly important internal dogfooding group who provided feedback to help refine and battle test ideas Of course it also greatly benefited from the experiences hard won by many other languages in the field drawing ideas from Objective C Rust Haskell Ruby Python C CLU and far too many others to list Timber History khlngkhxmulekaekbcakaehlngedimemux 2020 10 31 subkhnemux 7 October 2015 Chevalier Tim 28 January 2008 anybody can tell me the pronunciation of haskell Haskell cafe Mailing list subkhnemux 12 March 2011 Type inference originally using Peyton Jones 2003 sfn error no target CITEREFPeyton Jones2003 Edward Kmett Edward Kmett Type Classes vs the World Haskell in education subkhnemux 15 February 2016 Haskell in research subkhnemux 15 February 2016 Mossberg Erik 2020 06 08 erkmos haskell companies subkhnemux 2020 06 22 Haskell in industry HaskellWiki wiki haskell org subkhnemux 2020 06 22 PYPL PopularitY of Programming Language index pypl github io phasaxngkvs 22 January 2021 khlngkhxmulekaekbcakaehlngedimemux 17 September 2020 subkhnemux 22 January 2021