mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
What is Frege? ------------- Frege is a non-strict, pure functional programming language in the spirit of Haskell for the JVM. It enjoys a strong static type system with type inference. Higher rank types are supported, though type annotations are required for that. Frege programs are compiled to Java and run in a JVM. Existing Java Classes and Methods can be used seamlessly from Frege. The Frege programming language is named after and in honor of Gottlob Frege. Project State: ------------- The compiler, an Eclipse plugin and a provisional version of the documentation can be downloaded from here https://github.com/Frege/frege/releases. The REPL can be downloaded from here https://github.com/Frege/frege-repl/releases. An online REPL is running here http://try.frege-lang.org/. Examples: -------- 1) Command Line Clock: https://github.com/Frege/frege/blob/master/examples/CommandLineClock.fr 2) Brainfuck: https://github.com/Frege/frege/blob/master/examples/Brainfuck.fr 3) Concurrency: https://github.com/Frege/frege/blob/master/examples/Concurrent.fr 4) Sudoku: https://github.com/Frege/frege/blob/master/examples/Sudoku.fr 5) Java Swing examples: https://github.com/Frege/frege/blob/master/examples/SwingExamples.fr
80 lines
2.9 KiB
Plaintext
80 lines
2.9 KiB
Plaintext
package examples.SwingExamples where
|
|
|
|
import Java.Awt (ActionListener)
|
|
import Java.Swing
|
|
|
|
|
|
main _ = do
|
|
rs <- mapM Runnable.new [helloWorldGUI, buttonDemoGUI, celsiusConverterGUI]
|
|
mapM_ invokeLater rs
|
|
println "Hit enter to end ...."
|
|
s <- getLine
|
|
return ()
|
|
|
|
celsiusConverterGUI = do
|
|
tempTextField <- JTextField.new()
|
|
celsiusLabel <- JLabel.new ()
|
|
convertButton <- JButton.new ()
|
|
fahrenheitLabel <- JLabel.new ()
|
|
frame <- JFrame.new ()
|
|
frame.setDefaultCloseOperation JFrame.dispose_on_close
|
|
frame.setTitle "Celsius Converter"
|
|
celsiusLabel.setText "Celsius"
|
|
convertButton.setText "Convert"
|
|
let convertButtonActionPerformed _ = do
|
|
celsius <- tempTextField.getText
|
|
case celsius.double of
|
|
Left _ -> fahrenheitLabel.setText ("not a valid number: " ++ celsius)
|
|
Right c -> fahrenheitLabel.setText (show (c*1.8 + 32.0).long ++ " Fahrenheit")
|
|
return ()
|
|
ActionListener.new convertButtonActionPerformed >>= convertButton.addActionListener
|
|
fahrenheitLabel.setText "Fahrenheit"
|
|
contentPane <- frame.getContentPane
|
|
layout <- GroupLayout.new contentPane
|
|
contentPane.setLayout layout
|
|
-- TODO continue
|
|
-- http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/learn/CelsiusConverterProject/src/learn/CelsiusConverterGUI.java
|
|
frame.pack
|
|
frame.setVisible true
|
|
|
|
helloWorldGUI = do
|
|
frame <- JFrame.new "Hello World Frege"
|
|
frame.setDefaultCloseOperation(JFrame.dispose_on_close)
|
|
label <- JLabel.new "Hello World!"
|
|
cp <- frame.getContentPane
|
|
cp.add label
|
|
frame.pack
|
|
frame.setVisible true
|
|
|
|
buttonDemoGUI = do
|
|
frame <- JFrame.new "Button Demo"
|
|
frame.setDefaultCloseOperation(JFrame.dispose_on_close)
|
|
newContentPane <- JPanel.new ()
|
|
b1::JButton <- JButton.new "Disable middle button"
|
|
b1.setVerticalTextPosition SwingConstants.center
|
|
b1.setHorizontalTextPosition SwingConstants.leading
|
|
b2::JButton <- JButton.new "Middle button"
|
|
b2.setVerticalTextPosition SwingConstants.center
|
|
b2.setHorizontalTextPosition SwingConstants.leading
|
|
b3::JButton <- JButton.new "Enable middle button"
|
|
b3.setVerticalTextPosition SwingConstants.center
|
|
b3.setHorizontalTextPosition SwingConstants.leading
|
|
b3.setEnabled false
|
|
let action1 _ = do
|
|
b2.setEnabled false
|
|
b1.setEnabled false
|
|
b3.setEnabled true
|
|
action3 _ = do
|
|
b2.setEnabled true
|
|
b1.setEnabled true
|
|
b3.setEnabled false
|
|
ActionListener.new action1 >>= b1.addActionListener
|
|
ActionListener.new action3 >>= b3.addActionListener
|
|
newContentPane.add b1
|
|
newContentPane.add b2
|
|
newContentPane.add b3
|
|
newContentPane.setOpaque true
|
|
frame.setContentPane newContentPane
|
|
frame.pack
|
|
frame.setVisible true
|